Что такое @Html.Синтаксис DisplayFor для?
Я понимаю, что в Razor @Html делает кучу аккуратных вещей, таких как создание HTML для ссылок, входов и т. д.
но я не получаю функцию DisplayFor...
зачем мне писать:
@Html.DisplayFor(model => model.Title)
когда я мог бы просто написать:
@Model.Title
4 ответов
Html.DisplayFor()
отобразит DisplayTemplate, соответствующий типу свойства.
если он не может найти, я полагаю, он вызывает .ToString()
.
если вы не знаете о шаблонах отображения, это частичные представления, которые можно поместить в DisplayTemplates
папка внутри папки представления, связанной с контроллером.
пример:
если вы создаете представление с именем String.cshtml
внутри папки видом (напр.г Home
, или Shared
) следующий код:
@model string
@if (string.IsNullOrEmpty(Model)) {
<strong>Null string</strong>
}
else {
@Model
}
затем @Html.DisplayFor(model => model.Title)
(предполагая, что Title
является строкой) будет использовать шаблон и отображать <strong>Null string</strong>
если строка имеет значение null или пуста.
Я думаю, что основное преимущество будет при определении собственных шаблонов отображения или использовании аннотаций данных.
например, если ваш заголовок был датой, вы можете определить
[DisplayFormat(DataFormatString = "{0:d}")]
и затем на каждой странице он будет отображать значение согласованным образом. В противном случае может потребоваться настроить отображение на нескольких страницах. Таким образом, это не очень помогает для простых строк, но это помогает для валют, дат, электронных писем, URL-адресов и т. д.
вместо из адреса электронной почты, являющегося простой строкой, он может отображаться как ссылка:<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
DisplayFor
также полезно для шаблонов. Вы можете написать шаблон для своей модели и сделать что-то вроде этого:
@Html.DisplayFor(m => m)
аналогично @Html.EditorFor(m => m)
. Это полезно для Dry principal, так что вам не нужно снова и снова писать одну и ту же логику отображения для одной и той же модели.
взгляните на этот блог на шаблонах MVC2. Это все еще очень применимо к MVC3:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
это также полезно, если ваша модель имеет аннотации данных. Например, если свойство модели украшено символом EmailAddress
аннотации данных DisplayFor
будет отображаться как mailto:
ссылка.
после ищу ответ для себя в течение некоторого времени, я мог бы найти что-то. в общем, если мы используем его только для одного свойства, он выглядит одинаково, даже если мы делаем "источник просмотра" сгенерированного HTML Ниже генерируется HTML, например, когда я хочу отобразить только свойство Name для моего класса
<td>
myClassNameProperty
</td>
<td>
myClassNameProperty, This is direct from Item
</td>
это сгенерированный HTML снизу кода
<td>
@Html.DisplayFor(modelItem=>item.Genre.Name)
</td>
<td>
@item.Genre.Name, This is direct from Item
</td>
в то же время теперь, если я хочу отобразить все свойства в одном операторе для моего класса "жанр" в этом случай, я могу использовать @Html.DisplayFor (), чтобы сэкономить на моем вводе, по крайней мере
Я могу написать @Html.DisplayFor (modelItem= > item.Жанр) вместо написания отдельного утверждения для каждого свойства жанра, как показано ниже
@item.Genre.Name
@item.Genre.Id
@item.Genre.Description
и так далее в зависимости от количества свойств.