Asp.net mvc 4 在没有Jquery/javascript ASP.NET MVC 4的情况下有条件地更改WebGrid行颜色

Asp.net mvc 4 在没有Jquery/javascript ASP.NET MVC 4的情况下有条件地更改WebGrid行颜色,asp.net-mvc-4,webgrid,Asp.net Mvc 4,Webgrid,我知道以前有人问过这个问题,但我想用我自己的方式来问,并进一步澄清。我试图有条件地设置在ASP.NETMVC中使用webGrid创建的td的背景。我看不出有什么好办法 到目前为止,我得出的结论是: grid.Column("DATT", header: "Date", format: (item) => new MvcHtmlString ( (item.isCurrentlyBackordere

我知道以前有人问过这个问题,但我想用我自己的方式来问,并进一步澄清。我试图有条件地设置在ASP.NETMVC中使用webGrid创建的td的背景。我看不出有什么好办法

到目前为止,我得出的结论是:

 grid.Column("DATT", header: "Date", format: (item) => new MvcHtmlString
                   (
                           (item.isCurrentlyBackordered)
                           ?
                                   "<div style=\"background-color: red\">Item Backordered</div>" 
                           :
                           ""
                   )),
grid.Column(“DATT”,标题:“Date”,格式:(item)=>new MvcHtmlString
(
(项目.目前缺货)
?
“项目延期订购”
:
""
)),
这是一个不错的解决方案,但我希望外观更干净,因为webgrid默认值在表单元格中有一个小的填充,因此div也不会完全扩展到单元格的大小


有没有办法以任何方式编辑td?我知道我可以使用jquery或javascript更改背景和其他样式属性,但我不喜欢这样的想法:首先在服务器上构建表,然后在客户端再次迭代,在第一次迭代完成时有条件地更改颜色

希望以下答案对您有所帮助

    grid.GetHtml(columns: grid.Columns(grid.Column(columnName: "DATT", header: "Date",format: @<text> @{
        if (@item.isCurrentlyBackordered)
            {                                                                                                             
            <span>Item Backordered</span>                                                                                                          
            <script>
            $("tr:contains('Item Backordered')").css("background-color", "yellow");
            </script>
            }
          }</text>)))
grid.GetHtml(列:grid.columns(grid.Column)(列名称:“DATT”,标题:“Date”,格式:@@{
如果(@item.iscurrentlyboordered)
{                                                                                                             
缺货商品
$(“tr:contains('Item Backordered'))).css(“背景色”、“黄色”);
}
})))
您也可以在一个公共JQuery中编写此代码

 grid.Column("DATT", header: "Date", format: (item) => new MvcHtmlString
                   (
                           (item.isCurrentlyBackordered)
                           ?
                                   "<span>Item Backordered</span>" 
                           :
                           ""
                   )),
grid.Column(“DATT”,标题:“Date”,格式:(item)=>new MvcHtmlString
(
(项目.目前缺货)
?
“项目延期订购”
:
""
)),
JQuery

<script type="text/javascript">
    $(function () {
        $("tr:contains('Item Backordered')").css("background-color", "yellow");
    })
</script>

$(函数(){
$(“tr:contains('Item Backordered'))).css(“背景色”、“黄色”);
})

在Golda的回复和 我能够创建一个优雅的解决方案。这个解决方案使用JavaScript/JQuery,因为没有它似乎不可能做到,但(对我来说)使用了一个比我遇到的更干净的解决方案。我在模型类(type for List())中所做的是添加一个引用自身的属性,并将实例强制转换返回到其接口,如下所示:

    public iTrans This
    {
        get
        {
            return this;
        }
    }
我这样做是因为webGrid似乎只允许访问属性而不允许访问方法;无论访问级别如何

然后在同一个模型中,我有一个方法,该方法将有条件地将隐藏输入字段的标记附加到数据字符串,并将其作为MvcHtmlString对象返回:

    public MvcHtmlString htmlColorWrapper(string cellStr, string hexColor = "#ccc")
    {
        if (isOnBackorder)
        {
            cellStr = cellStr + "<input type='hidden' class='color' value='" + hexColor + "'/>";
        }

        return new MvcHtmlString(cellStr);
    }
然后创建JavaScript函数:

window.onload需要指向SetFeaturedRow()函数来设置页面加载时的行颜色,函数名“SetFeaturedRow”通过webgrid构造函数参数存储在ajaxUpdateCallback属性中:new webgrid(Model…..ajaxUpdateCallback:“SetFeaturedRow”);也可以通过WebGrid引用进行设置,ref.ajaxUpdateCallback=“SetFeatureRow”

这将在WebGrid类进行的任何ajax调用中使用。例如,如果webgrid有多个页面,则每个选择都是一个ajax调用,需要重新更新行颜色


希望这对某人有所帮助。

谢谢你的帮助。在我找到的另一个资源的帮助下,通过查看您的示例,我能够想出一个解决方案。谢谢
grid.Column("Date", header: "Date", format: (item) => item.This.htmlColorWrapper(item.Date.ToString("MM/dd/yyy"))),
 window.onload = function () {
     SetFeaturedRow();
 };

 function SetFeaturedRow() {
     $('.color').each(function (index, element) {
         $(element).parent().parent().css('background-color', $(element).val());
     });
 }