What is the @Html.DisplayFor syntax for?
我了解在Razor中,@ Html会执行许多整洁的操作,例如为链接,输入生成HTML等。
但是我没有DisplayFor函数...
我为什么要写:
1 | @Html.DisplayFor(model => model.Title) |
当我可以写的时候:
1 | @Model.Title |
如果找不到,我想它会调用
如果您不了解显示模板,则它们是局部视图,可以放在与控制器关联的视图文件夹内的
例:
如果在视图文件夹的
1 2 3 4 5 6 7 8 | @model string @if (string.IsNullOrEmpty(Model)) { Null string } else { @Model } |
然后
我认为主要的好处是当您定义自己的显示模板或使用数据注释时。
因此,例如,如果标题是日期,则可以定义
1 | [DisplayFormat(DataFormatString ="{0:d}")] |
然后将在每个页面上以一致的方式显示该值。否则,您可能必须自定义多个页面上的显示。因此,它对纯字符串没有太大帮助,但对货币,日期,电子邮件,URL等却没有帮助。
例如,不是电子邮件地址是纯字符串,而是显示为链接:
1 | @ViewData.TemplateInfo.FormattedModelValue |
1 | @Html.DisplayFor(m => m) |
与
看一下有关MVC2模板的博客。它仍然非常适用于MVC3:
如果您的模型具有数据注释,这也很有用。例如,如果模型的属性装饰有
在为自己寻找答案一段时间后,我可以找到一些东西。
通常,如果我们仅将其用于一个属性,那么即使我们对生成的HTML进行"查看源代码",它也会看起来相同
下面是生成的HTML,例如,当我只想显示我的班级的Name属性时
1 2 3 4 5 6 | <td> myClassNameProperty </td> <td> myClassNameProperty, This is direct from Item </td> |
这是下面代码生成的HTML
1 2 3 4 5 6 7 | <td> @Html.DisplayFor(modelItem=>item.Genre.Name) </td> <td> @item.Genre.Name, This is direct from Item </td> |
现在,如果同时要在这种情况下为类"流派"在一条语句中显示所有属性,
我可以使用@ Html.DisplayFor()至少保存我的输入内容
我可以编写@ Html.DisplayFor(modelItem => item.Genre)来代替为Genre的每个属性编写单独的语句,如下所示
1 2 3 | @item.Genre.Name @item.Genre.Id @item.Genre.Description |
等等,取决于属性的数量。