Mic*_*yor 218 razor asp.net-mvc-3
据我所知,在Razor中,@ Html做了很多简洁的事情,比如为链接,输入等生成HTML.
但我没有得到DisplayFor功能......
我为什么要写:
@Html.DisplayFor(model => model.Title)
Run Code Online (Sandbox Code Playgroud)
什么时候我可以写:
@Model.Title
Run Code Online (Sandbox Code Playgroud)
Ber*_*ron 212
Html.DisplayFor() 将呈现与属性类型匹配的DisplayTemplate.
如果找不到,我想它会调用.ToString().
如果您不了解显示模板,则它们是部分视图,可以放在DisplayTemplates与控制器关联的视图文件夹内的文件夹中.
例:
如果您创建一个名为视图String.cshtml里面DisplayTemplates你的意见文件夹的文件夹(例如Home,或者Shared用下面的代码):
@model string
@if (string.IsNullOrEmpty(Model)) {
<strong>Null string</strong>
}
else {
@Model
}
Run Code Online (Sandbox Code Playgroud)
然后@Html.DisplayFor(model => model.Title)(假设这Title是一个字符串)将使用模板并显示<strong>Null string</strong>字符串是否为空或空.
Dav*_*veo 74
我认为主要的好处是当您定义自己的显示模板或使用数据注释时.
因此,例如,如果您的标题是日期,您可以定义
[DisplayFormat(DataFormatString = "{0:d}")]
Run Code Online (Sandbox Code Playgroud)
然后在每个页面上,它将以一致的方式显示值.否则,您可能需要在多个页面上自定义显示.所以它对普通字符串没什么帮助,但它对货币,日期,电子邮件,网址等有帮助.
例如,不是电子邮件地址是普通字符串,而是可以显示为链接:
<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
Run Code Online (Sandbox Code Playgroud)
vcs*_*nes 28
DisplayFor对模板也很有用.您可以为模型编写模板,并执行以下操作:
@Html.DisplayFor(m => m)
Run Code Online (Sandbox Code Playgroud)
类似于@Html.EditorFor(m => m).它对DRY主体很有用,因此您不必为同一模型反复编写相同的显示逻辑.
看一下关于MVC2模板的博客.它仍然非常适用于MVC3:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
如果您的模型具有数据注释,它也很有用.例如,如果模型上的属性使用EmailAddress数据注释进行修饰,DisplayFor则会将其呈现为mailto:链接.
| 归档时间: |
|
| 查看次数: |
183487 次 |
| 最近记录: |