2013-04-12 2 views
3

У меня есть тройной оператор в моем MVC4 Виде:ASP.NET Razor - Могу ли я поместить ссылку в тройной оператор?

@(modelrecord.Website == null ? "" : modelrecord.Website.Replace("http://",""))

Это работает, но я хочу, чтобы сделать веб-сайт запись гиперссылки. Это возможно?

Примечание: Я заменяю префикс «http: //», потому что он уродлив.

Если я вставил фактическую строку с помощью Html.Raw, угловые скобки экранированы, и я до сих пор не получаю ссылку.

ответ

3

Возможно, вы используете DataAnnotations и вспомогательный помощник @Html.DispayFor.

public class ModelRecord 
{ 
    [DataType(DataType.EmailAddress)] 
    public String EmailAddress { get; set; } 

    [DataType(DataType.Url)] 
    public String Website { get; set; } 
} 

Тогда:

email me at @Html.DisplayFor(x => x.EmailAddress) 
or visit me online at @Html.DisplayFor(x => x.Website) 

DataTypeAttribute обрабатывает такие вещи, как URL, сообщений электронной почты и т.д., и форматирует их в зависимости.

Если вы хотите, чтобы настроить все Urls, вы можете создать display template для него:

~/Просмотров/Shared/DisplayTemplates/Url.cshtml

@model String 
@if (!String.IsNullOrEmpty(Model)) 
{ 
    <a href="@Model">@Model.Replace("http://", "")</a> 
} 
else 
{ 
    @:Default text when url is empty. 
} 

DisplayTemplates (как EditorTemplates) является путь, основанный на соглашениях, который использует MVC. из-за этого вы можете поместить шаблон в каталог Shared, чтобы применить это изменение на уровне всего веб-сайта, или вы можете поместить папку в одну из папок контроллера, чтобы применить ее только к этому контроллеру (например, ~/Views/Home/Displaytemplates/Url.cshtml). Кроме того, Url является одним из предопределенных шаблонов включены для использования с DisplayType, наряду со следующим:

  • Url
  • EmailAddress
  • HiddenInput
  • Html
  • Текст
+0

Отлично. Большое спасибо. Я должен был использовать '@ Html.DisplayFor (x => modelrecord.Website) вместо этого - этот ответ объяснил это: http://stackoverflow.com/questions/10097995/i-want-to-understand-the-lambda-expression -in-html-displayformodelitem-mymo – northben

+0

@northben: Действительно. Я не знал структуру вашей виртуальной машины, но показывал, как вы отформатируете значение самым простым способом. Как и в случае с вами, вам нужно будет ссылаться на свойство с вложенного объекта модели (и вы видите, как), но предпосылка и декорация одинаковы. –

+0

вы уверены, что 'x => x.Website' будет работать для любой модели? Я, очевидно, новичок в этом, но, похоже, первый x «перезаписывает» второй в этой «без параметров» лямбда. – northben

Смежные вопросы