将CSS类应用于Html.DisplayFor(ASP.NET MVC)

fel*_*dwe 4 asp.net-mvc html5 razor

我是MVC的新手,正在尝试将CS​​S样式应用于我的模板文件内的Html.DisplayForhelper:Shared >> EditorTemplate >> Contacts.cshtml。下面是我的代码:

@model People.Contacts
<div>
    @Html.DisplayNameFor(m => m.Name) <span class="myclass">@Html.DisplayFor(m => m.FirstName) @Html.DisplayFor(m => m.LastName)</span></div>
Run Code Online (Sandbox Code Playgroud)

我在模板之外的css类如下所示:

.myclass{font:italic bold;} 
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 5

Html.DisplayFor不支持传递HTML属性,包括类/样式。最基本的是,它仅呈现值,没有任何HTML,并且具有编辑器/显示模板,它仅呈现模板中的内容。

首先,如果您有EditorTemplates\Contacts.cshtml,那实际上将不会被所使用DisplayFor。因为DisplayFor您需要一个单独的模板Views\Shared\DisplayTemplates。顾名思义,它EditorTemplates被使用EditorFor

无论是DisplayForEditorFor基本相同的调用Html.Partial。仅存在一些其他逻辑来处理特定的模型属性,并默认在DisplayTemplates/ EditorTemplates中查看视图。就是说,您可以像通过部分通过一样将其他数据传递给它们ViewData

例如,如果您要呼叫@Html.DisplayFor(m => m.FirstName, new { @class = "myclass" }),则默认情况下将不会发生任何事情,但是"myclass"in 的值为ViewData["class"]。然后,您可以使用它来修改模板的一部分。例如:

Views \ Shared \ DisplayTemplates \ Contacts.cshtml

<span @(ViewData["class"] != null ? "class='" + ViewData["class"] + "'" : string.Empty)>
    @ViewData.TemplateInfo.FormattedModelValue
</span>
Run Code Online (Sandbox Code Playgroud)

这将检查是否ViewData["class"]具有值,如果是,则将具有该值的class属性添加到跨度。