Answers:
Html.DisplayFor()
将呈现与属性类型匹配的DisplayTemplate。
如果找不到,我想它会调用.ToString()
。
如果您不了解显示模板,则它们是局部视图,可以放置在DisplayTemplates
与控制器关联的view文件夹内的文件夹中。
例:
如果您使用以下代码在views文件夹的文件夹(例如或)String.cshtml
内创建一个名为view的视图: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>
字符串是否为null或为空。
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进行“查看源代码”,它也会看起来相同。例如,当我只想为我的类显示Name属性时,就会生成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>
现在,如果同时要在类“ Genre”的一个语句中显示所有属性,则至少可以使用@ Html.DisplayFor()保存输入内容
我可以编写@ Html.DisplayFor(modelItem => item.Genre)来代替为Genre的每个属性编写单独的语句,如下所示
@item.Genre.Name
@item.Genre.Id
@item.Genre.Description
等等,取决于属性的数量。