【发布时间】:2018-03-29 02:37:01
【问题描述】:
我的 asp.net MVC Razor 视图中有以下代码:-
@{
List<Marketing.Models.SalesData> allLevels = ViewBag.AllLevels;
var gridcolumns = new List<WebGridColumn>();
gridcolumns.Add(new WebGridColumn()
{
ColumnName = "Status",
Header = Html.DisplayNameFor(model => model.Content.FirstOrDefault().Status).ToString(),
CanSort = true,
Format =
(item) =>
{
var banner = item.Value as Marketing.Models.SalesData;
return Html.DisplayFor(modelItem => banner.Status, new { @class = banner.Status });
}
});
现在我要做的是在我的Html.DisplayFor(modelItem => banner.Status, new { @class = banner.Status }); 中定义一个 css 类,但这将呈现没有任何 css 类,如下所示:-
<td>succeed</td>
现在我虽然定义类的方式有问题,所以我尝试了这个测试,硬编码类名Html.DisplayFor(modelItem => banner.Status, new { @class = "testclass"}); 但这并没有呈现 css 类..所以有人可以推荐一下吗?
现在我正在使用 asp.net mvc 5.2.3.0 版,它应该支持在我的 HTML 助手中定义 css 类。
【问题讨论】:
-
DisplayFor()只生成文本,而不是 html 元素。将其包装在<span>或其他元素中,并将类名添加到该元素 -
@StephenMuecke 我没明白你的意思吗?现在我应该能够将 css 类应用于 DisplayFor。在我的情况下,我想根据文本对状态值进行颜色编码。成功被着色为绿色,失败被着色为红色..如果我在普通的 html 表中渲染
Html.Displayfor,我会在剃刀视图中毫无问题地执行这些操作,但似乎在 webgrid 内部这不起作用.. -
不,你不能。查看documented overloads 的
DisplayFor()- 没有添加htmlAttributes的重载,因为没有意义 - 它不会生成html 元素(除非您有DisplayTemplate) -
@StephenMuecke 我记得在过去的项目中,我将 css 类应用于 EditorFor 和 DisplaFor,而这些仅在 mvc 版本 5 或更高版本中受支持
-
您可以在
EditorFor()中(使用MVC-5.1 或更高版本),因为EditorFor()生成一个html 元素(<input>),但您从未能够使用DisplayFor()(除非您创建DisplayTemplate并使用 this overload 将类名作为additionalViewData传递
标签: css asp.net-mvc asp.net-mvc-5 html-helper displayfor