什么是@ Html.DisplayFor语法?
我明白,在剃刀,@Html做了一堆整洁的东西,如生成HTML的链接,input等
但是我没有得到DisplayFor函数…
我为什么要写:
@Html.DisplayFor(model => model.Title)
当我可以写:
@Model.Title
Html.DisplayFor()
将呈现与该属性types匹配的DisplayTemplate。
如果它找不到任何,我想它调用.ToString()
。
如果您不了解显示模板,则可以将其放在与控制器关联的视图文件夹内的DisplayTemplates
文件夹中。
例:
如果您使用以下代码在视图文件夹的DisplayTemplates
文件夹(例如Home
或Shared
)中创build名为String.cshtml
的视图:
@model string @if (string.IsNullOrEmpty(Model)) { <strong>Null string</strong> } else { @Model }
然后@Html.DisplayFor(model => model.Title)
(假设Title
是一个string)将使用该模板,如果string为null或空,则显示<strong>Null string</strong>
。
我认为主要的好处是当你定义你自己的显示模板,或使用数据注释。
例如,如果你的标题是一个date,你可以定义
[DisplayFormat(DataFormatString = "{0:d}")]
然后在每个页面上以一致的方式显示值。 否则,您可能不得不在多个页面上自定义显示。 所以对简单的string没有多大的帮助,但对于货币,date,电子邮件,url等有帮助。
例如,而不是一个电子邮件地址是一个普通的string,它可以显示为一个链接:
<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:
链接。
在为自己寻找答案一段时间后,我可以find一些东西。 一般情况下,如果我们只使用它的一个属性,即使我们做一个生成的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>
现在,如果我想在这种情况下显示我的类“stream派”在一个语句中的所有属性,我可以使用@ Html.DisplayFor()保存我的打字,至less
我可以写下@ Html.DisplayFor(modelItem => item.Genre)来代替为types的每个属性编写单独的语句,如下所示
@item.Genre.Name @item.Genre.Id @item.Genre.Description
依赖于属性的数量等等。
- 在jquery.dialog中加载一个局部视图
- 无法findtypes或名称空间名称“DbContext”
- 在ASP.NET MVC 3中用C#创build级联下拉最简单的方法
- 在Razor视图中启用客户端validation(ASP MVC 3)
- entity framework5更新logging
- url内的双转义序列:请求过滤模块configuration为拒绝包含双转义序列的请求
- 扩展AuthorizeAttribute覆盖AuthorizeCore或OnAuthorization
- 如何在.NET MVC3应用程序中检测移动浏览器
- 在ASP.Net MVC中设置Access-Control-Allow-Origin – 最简单的方法