Html.DisplayFor() отобразит шаблон DisplayTemplate, соответствующий типу свойства.
Если он не может найти ничего, я полагаю, это вызывает .ToString().
Если вы не знаете о шаблонах отображения, это частичные представления, которые можно поместить в DisplayTemplatesпапку внутри папки представлений, связанной с контроллером.
Пример:
Если вы создаете представление с именем String.cshtmlвнутри DisplayTemplatesпапки вашей папки представлений (например Home, или Shared) со следующим кодом:
Затем @Html.DisplayFor(model => model.Title)(при условии, что Titleэто строка) будет использовать шаблон и отображать, является <strong>Null string</strong>ли строка пустой или пустой.
В большинстве случаев мне кажется бессмысленным использовать DisplayFor для примитивных типов. Например, DateTime будет отображать дату / время, даже если часть времени была бесполезна. Если бы вы могли указать строку формата "{0: d}" для типа DateTime в атрибутах свойства в модели, DisplayFor мог бы быть более полезным.
Вы можете добавить средство выбора даты jQuery в шаблон EditorFor для типа данных DateTime, чтобы, например, всегда отображать средство выбора даты в формах.
Захари Скотт
4
Мне кажется, что использовать его в общем-то слишком сложно, но его следует использовать, когда вы хотите отформатировать вывод для определенных атрибутов модели. Полезные вопросы и ответы, ребята, спасибо. +1 со всех сторон.
Робин Уинслоу
что произойдет, если у вас есть две модели с одинаковым именем?
Халивингстон
77
Я думаю, что основным преимуществом будет то, когда вы определяете свои собственные шаблоны отображения или используете аннотации данных.
Так, например, если ваш заголовок был датой, вы можете определить
[DisplayFormat(DataFormatString="{0:d}")]
а затем на каждой странице будет отображаться значение в согласованном порядке. В противном случае вам может потребоваться настроить отображение на нескольких страницах. Так что это не очень помогает для простых строк, но это помогает для валют, дат, электронных писем, URL и т. Д.
Например, вместо адреса электронной почты, являющегося простой строкой, он может отображаться в виде ссылки:
DisplayForтакже полезно для шаблонов. Вы можете написать шаблон для вашей модели и сделать что-то вроде этого:
@Html.DisplayFor(m => m)
Похоже на @Html.EditorFor(m => m). Это полезно для принципала DRY, чтобы вам не приходилось писать одну и ту же логику отображения снова и снова для одной и той же модели.
Посмотрите на этот блог шаблоны MVC2. Это все еще очень применимо к MVC3:
Это также полезно, если ваша модель имеет аннотацию данных. Например, если свойство модели украшено EmailAddressаннотацией данных, DisplayForбудет отображаться как mailto:ссылка.
@Html.DisplayFor(m => m)также может быть упрощен до справедливости @Html.DisplayForModel().
Брант Бобби
Что такое лямда-выражение (m => m)? Что представляет собой первый символ?
Аркадиан
1
первый m это имя параметра
Sinaesthetic
1
@ magic-c0d3r первый m - это объект модели страницы. Вот что используется в выражении labmda
Дон Чидл
4
После того, как я некоторое время искал ответ для себя, я мог что-то найти. в общем, если мы используем его только для одного свойства, оно выглядит одинаково, даже если мы делаем «Просмотр источника» сгенерированного HTML. Ниже приведен пример HTML, например, когда я хочу отобразить только свойство Name для моего класса
<td>
myClassNameProperty
</td><td>
myClassNameProperty,Thisis direct fromItem</td>
Это сгенерированный HTML из кода ниже
<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td><td>@item.Genre.Name,Thisis direct fromItem</td>
В то же время, теперь, если я хочу отобразить все свойства в одном выражении для своего класса «Жанр» в этом случае, я могу использовать @ Html.DisplayFor (), чтобы сэкономить на наборе текста, по крайней мере,
я могу написать @ Html.DisplayFor (modelItem => item.Genre) вместо написания отдельного оператора для каждого свойства жанра, как показано ниже
Я думаю, что основным преимуществом будет то, когда вы определяете свои собственные шаблоны отображения или используете аннотации данных.
Так, например, если ваш заголовок был датой, вы можете определить
а затем на каждой странице будет отображаться значение в согласованном порядке. В противном случае вам может потребоваться настроить отображение на нескольких страницах. Так что это не очень помогает для простых строк, но это помогает для валют, дат, электронных писем, URL и т. Д.
Например, вместо адреса электронной почты, являющегося простой строкой, он может отображаться в виде ссылки:
источник
DisplayFor
также полезно для шаблонов. Вы можете написать шаблон для вашей модели и сделать что-то вроде этого:Похоже на
@Html.EditorFor(m => m)
. Это полезно для принципала DRY, чтобы вам не приходилось писать одну и ту же логику отображения снова и снова для одной и той же модели.Посмотрите на этот блог шаблоны MVC2. Это все еще очень применимо к MVC3:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
Это также полезно, если ваша модель имеет аннотацию данных. Например, если свойство модели украшено
EmailAddress
аннотацией данных,DisplayFor
будет отображаться какmailto:
ссылка.источник
@Html.DisplayFor(m => m)
также может быть упрощен до справедливости@Html.DisplayForModel()
.После того, как я некоторое время искал ответ для себя, я мог что-то найти. в общем, если мы используем его только для одного свойства, оно выглядит одинаково, даже если мы делаем «Просмотр источника» сгенерированного HTML. Ниже приведен пример HTML, например, когда я хочу отобразить только свойство Name для моего класса
Это сгенерированный HTML из кода ниже
В то же время, теперь, если я хочу отобразить все свойства в одном выражении для своего класса «Жанр» в этом случае, я могу использовать @ Html.DisplayFor (), чтобы сэкономить на наборе текста, по крайней мере,
я могу написать @ Html.DisplayFor (modelItem => item.Genre) вместо написания отдельного оператора для каждого свойства жанра, как показано ниже
и так далее в зависимости от количества свойств.
источник