Asp.net mvc 4 在没有Jquery/javascript ASP.NET MVC 4的情况下有条件地更改WebGrid行颜色
我知道以前有人问过这个问题,但我想用我自己的方式来问,并进一步澄清。我试图有条件地设置在ASP.NETMVC中使用webGrid创建的td的背景。我看不出有什么好办法 到目前为止,我得出的结论是: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
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());
});
}