什么是@Html。DisplayFor语法?

我知道在Razor中,@Html做了一堆整洁的事情,比如为链接、输入生成HTML等。

但是我没有得到DisplayFor函数…

我为什么要写:

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

我只需要写:

@Model.Title
226035 次浏览

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

如果找不到,我假设它调用.ToString()


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


例子:

如果你在视图文件夹(例如HomeShared)的DisplayTemplates文件夹中创建一个名为String.cshtml的视图,代码如下:

@model string


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

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

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

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

例如,如果你的标题是一个日期,你可以定义

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

然后在每一页上,它都会以一致的方式显示值。否则,您可能必须在多个页面上自定义显示。所以它对普通字符串没有太大帮助,但它对货币、日期、电子邮件、url等有帮助。

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

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

一般来说,如果它只用于一个属性,那么生成的HTML看起来是相同的。

例如这段代码

<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td>
<td>@item.Genre.Name, This is direct from Item</td>

生成这个HTML

<td>myClassNameProperty</td>
<td>myClassNameProperty, This is direct from Item</td>

同时,现在如果我想在一个语句中显示我的类的所有属性"在这种情况下, 我可以使用@Html.DisplayFor()来保存我的输入,至少

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

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

等等,取决于属性的数量。

第三方编辑

html helper文件:

HTML Helper只是一个返回字符串的方法。弦可以 表示所需的任何类型的内容。例如,你可以使用 HTML助手渲染标准的HTML标签,如HTML和 标签。您还可以使用HTML helper来呈现更复杂的内容 例如标签条或数据库数据的HTML表

要呈现更复杂的html,使用MVC自定义HTML模板asp.net core中的自定义标记助手