【发布时间】:2011-09-15 23:25:36
【问题描述】:
我知道在 Razor 中,@Html 做了很多简洁的事情,比如为链接、输入等生成 HTML。
但我没有得到 DisplayFor 功能...
我为什么要写:
@Html.DisplayFor(model => model.Title)
当我可以写的时候:
@Model.Title
【问题讨论】:
标签: asp.net-mvc-3 razor
我知道在 Razor 中,@Html 做了很多简洁的事情,比如为链接、输入等生成 HTML。
但我没有得到 DisplayFor 功能...
我为什么要写:
@Html.DisplayFor(model => model.Title)
当我可以写的时候:
@Model.Title
【问题讨论】:
标签: asp.net-mvc-3 razor
Html.DisplayFor() 将呈现与属性类型匹配的 DisplayTemplate。
如果找不到,我想它会调用.ToString()。
如果您不了解显示模板,它们是部分视图,可以放在与控制器关联的视图文件夹内的 DisplayTemplates 文件夹中。
例子:
如果您使用以下代码在您的视图文件夹的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>。
【讨论】:
我认为主要的好处是当您定义自己的显示模板或使用数据注释时。
例如,如果您的标题是日期,您可以定义
[DisplayFormat(DataFormatString = "{0:d}")]
然后在每个页面上都会以一致的方式显示该值。否则,您可能必须在多个页面上自定义显示。所以它对纯字符串没有多大帮助,但它对货币、日期、电子邮件、网址等有帮助。
例如,电子邮件地址不是纯字符串,而是可以显示为链接:
<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
【讨论】:
DisplayFor 也可用于模板。您可以为您的模型编写一个模板,然后执行以下操作:
@Html.DisplayFor(m => m)
类似于@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 似乎是相同的。
例如这段代码
<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td>
<td>@item.Genre.Name, This is direct from Item</td>
生成此 HTML
<td>myClassNameProperty</td>
<td>myClassNameProperty, This is direct from Item</td>
同时,如果我想在这种情况下为我的类“流派”在一个语句中显示所有属性, 我可以使用@Html.DisplayFor() 来节省我的打字时间,至少
我可以编写 @Html.DisplayFor(modelItem=>item.Genre) 来代替为 Genre 的每个属性编写单独的语句,如下所示
@item.Genre.Name
@item.Genre.Id
@item.Genre.Description
等等,取决于属性的数量。
HTML Helper 只是一个返回字符串的方法。字符串可以 代表您想要的任何类型的内容。例如,您可以使用 HTML Helpers 呈现标准的 HTML 标签,如 HTML 和 标签。您还可以使用 HTML Helpers 来呈现更复杂的内容 例如标签条或数据库数据的 HTML 表。
为了渲染更复杂的html,使用mvc custom html templates或custom tag helpers in asp.net core。
【讨论】: