据我所知,在Razor中,@ Html做了很多简洁的事情,比如为链接,输入等生成HTML。
但是我没有得到DisplayFor函数......
我为什么要写:
@Html.DisplayFor(model => model.Title)
我可以写的时候:
@Model.Title
答案 0 :(得分:206)
Html.DisplayFor()
将呈现与属性类型匹配的DisplayTemplate。
如果找不到,我想它会调用.ToString()
。
如果您不了解显示模板,则它们是部分视图,可以放在与控制器关联的视图文件夹内的DisplayTemplates
文件夹中。
示例:
如果您使用以下代码在视图文件夹的String.cshtml
文件夹中创建名为DisplayTemplates
的视图(例如Home
或Shared
):
@model string
@if (string.IsNullOrEmpty(Model)) {
<strong>Null string</strong>
}
else {
@Model
}
然后@Html.DisplayFor(model => model.Title)
(假设Title
是一个字符串)将使用模板并在字符串为空或空时显示<strong>Null string</strong>
。
答案 1 :(得分:73)
我认为主要的好处是当您定义自己的显示模板或使用数据注释时。
例如,如果您的标题是日期,则可以定义
[DisplayFormat(DataFormatString = "{0:d}")]
然后在每个页面上以一致的方式显示值。否则,您可能需要在多个页面上自定义显示。所以它对普通字符串没什么帮助,但它对货币,日期,电子邮件,网址等有帮助。
例如,不是电子邮件地址是普通字符串,而是可以显示为链接:
<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
答案 2 :(得分:28)
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:
链接。
答案 3 :(得分:4)
在为自己寻找答案一段时间后,我能找到一些东西。 一般来说,如果我们仅将它用于一个属性,即使我们执行了一个&#34; View Source&#34;生成的HTML 下面是生成的HTML,例如,当我想只显示我的类的名称属性
时 <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>
同时现在如果我想在我的班级的一个陈述中显示所有属性&#34;流派&#34;在这种情况下, 我可以使用@ Html.DisplayFor()来保存我的输入,至少
我可以编写@ Html.DisplayFor(modelItem =&gt; item.Genre)代替为类型的每个属性编写单独的语句,如下所示
@item.Genre.Name
@item.Genre.Id
@item.Genre.Description
等取决于属性的数量。