什么是@ Html.DisplayFor语法?

时间:2011-06-15 23:30:15

标签: asp.net-mvc-3 razor

据我所知,在Razor中,@ Html做了很多简洁的事情,比如为链接,输入等生成HTML。

但是我没有得到DisplayFor函数......

我为什么要写:

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

我可以写的时候:

@Model.Title

4 个答案:

答案 0 :(得分:206)

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

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


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


示例:

如果您使用以下代码在视图文件夹的String.cshtml文件夹中创建名为DisplayTemplates的视图(例如HomeShared):

@model string

@if (string.IsNullOrEmpty(Model)) {
   <strong>Null string</strong>
}
else {
   @Model
}

然后@Html.DisplayFor(model => model.Title)(假设Title是一个字符串)将使用模板并在字符串为空或空时显示<strong>Null string</strong>

答案 1 :(得分:73)

我认为主要的好处是当您定义自己的显示模板或使用数据注释时。

例如,如果您的标题是日期,则可以定义

[DisplayFormat(DataFormatString = "{0:d}")]

然后在每个页面上以一致的方式显示值。否则,您可能需要在多个页面上自定义显示。所以它对普通字符串没什么帮助,但它对货币,日期,电子邮件,网址等有帮助。

例如,不是电子邮件地址是普通字符串,而是可以显示为链接:

<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>

答案 2 :(得分:28)

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:链接。

答案 3 :(得分:4)

在为自己寻找答案一段时间后,我能找到一些东西。 一般来说,如果我们仅将它用于一个属性,即使我们执行了一个&#34; View Source&#34;生成的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>

同时现在如果我想在我的班级的一个陈述中显示所有属性&#34;流派&#34;在这种情况下, 我可以使用@ Html.DisplayFor()来保存我的输入,至少

我可以编写@ Html.DisplayFor(modelItem =&gt; item.Genre)代替为类型的每个属性编写单独的语句,如下所示

@item.Genre.Name
@item.Genre.Id
@item.Genre.Description

等取决于属性的数量。