什么是@ Html.DisplayFor语法?

我明白,在剃刀,@Html做了一堆整洁的东西,如生成HTML的链接,input等

但是我没有得到DisplayFor函数…

我为什么要写:

@Html.DisplayFor(model => model.Title) 

当我可以写:

 @Model.Title 

Html.DisplayFor()将呈现与该属性types匹配的DisplayTemplate。

如果它找不到任何,我想它调用.ToString()


如果您不了解显示模板,则可以将其放在与控制器关联的视图文件夹内的DisplayTemplates文件夹中。


例:

如果您使用以下代码在视图文件夹的DisplayTemplates文件夹(例如HomeShared )中创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 

依赖于属性的数量等等。