【问题标题】:Unable to apply a css class to my @Html.DisplayFor inside a WebGrid, inside my asp.net MVC 5 web application无法在我的 asp.net MVC 5 Web 应用程序中的 WebGrid 中将 css 类应用于我的 @Html.DisplayFor
【发布时间】: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 =&gt; banner.Status, new { @class = banner.Status }); 中定义一个 css 类,但这将呈现没有任何 css 类,如下所示:-

<td>succeed</td>

现在我虽然定义类的方式有问题,所以我尝试了这个测试,硬编码类名Html.DisplayFor(modelItem =&gt; banner.Status, new { @class = "testclass"}); 但这并没有呈现 css 类..所以有人可以推荐一下吗? 现在我正在使用 asp.net mvc 5.2.3.0 版,它应该支持在我的 HTML 助手中定义 css 类。

【问题讨论】:

  • DisplayFor() 只生成文本,而不是 html 元素。将其包装在 &lt;span&gt; 或其他元素中,并将类名添加到该元素
  • @StephenMuecke 我没明白你的意思吗?现在我应该能够将 css 类应用于 DisplayFor。在我的情况下,我想根据文本对状态值进行颜色编码。成功被着色为绿色,失败被着色为红色..如果我在普通的 html 表中渲染Html.Displayfor,我会在剃刀视图中毫无问题地执行这些操作,但似乎在 webgrid 内部这不起作用..
  • 不,你不能。查看documented overloadsDisplayFor() - 没有添加htmlAttributes 的重载,因为没有意义 - 它不会生成html 元素(除非您有DisplayTemplate
  • @StephenMuecke 我记​​得在过去的项目中,我将 css 类应用于 EditorFor 和 DisplaFor,而这些仅在 mvc 版本 5 或更高版本中受支持
  • 您可以在EditorFor() 中(使用MVC-5.1 或更高版本),因为EditorFor() 生成一个html 元素(&lt;input&gt;),但您从未能够使用DisplayFor()(除非您创建 DisplayTemplate 并使用 this overload 将类名作为 additionalViewData 传递

标签: css asp.net-mvc asp.net-mvc-5 html-helper displayfor


【解决方案1】:

首先看一下这个例子。 @Html.LabelFor() Helper 函数呈现 &lt;label&gt;&lt;/label&gt; 标记。假设如果你写@Html.LabelFor(m=&gt;m.Name, new {@class = "form-control"})它返回&lt;label class = "form-control"&gt;David&lt;/label&gt;。所以我们可以将类应用于帮助函数的标签。 但是@Html.DisplayFor() 不渲染任何 html 标签。如果你写@Html.DisplayFor(m=&gt;m.Name),它只返回你的名字,比如:David。 因此,您必须将 @Html.DisplayFor() Helper 包装在一个跨度内并对其应用类。 喜欢:&lt;span class = "form-control"&gt;@Html.DisplayFor(m=&gt;m.Name)&lt;/span&gt;。然后输出将是 &lt;span class="form-control"&gt;David&lt;/span&gt; 。这意味着应用于名称属性的类。 希望这会有所帮助..

【讨论】:

  • 但是我怎样才能在一个 span 内返回我的 displayfor ,就像我尝试这段代码时一样 return "&lt;span class="+banner.Status +"&gt;"+Html.DisplayFor(modelItem =&gt; banner.Status)+"&lt;/span&gt;"; 我在我的网络网格单元格中呈现了这个文本 &lt;span class=succeed&gt;succeed&lt;/span&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多