我需要根据@ Html.CheckBox中使用的model(boolean)属性的值来更改表中给定行的背景颜色。使用PostExampleCompleted操作方法中的新复选框值更新模型。
<table>
<thead>
<tr>
<th>Item name</th>
<th>Comments</th>
<th>User</th>
<th>Complete</th>
</tr>
</thead>
<tbody>
<tr id="FooRow">
<td>Foo</td>
<td>@Model.FooComments</td>
<td>@Model.FooUserName</td>
<td>
@using (Ajax.BeginForm("PostFooCompleted", "Home", new AjaxOptions { OnBegin = "ShowProcessingMsg", OnComplete = "HideProcessingMsg" }))
{
@Html.CheckBox("FooItemComplete", Model.FooComplete, new { onClick = "$(this).parent('form:first').submit();" })
}
</td>
</tr>
<tr id="WidgetRow">
<td>Widget</td>
<td>@Model.WidgetComments</td>
<td>@Model.WidgetUserName</td>
@using (Ajax.BeginForm("PostWidgetCompleted", "Home", new AjaxOptions { OnBegin = "ShowProcessingMsg", OnComplete = "HideProcessingMsg" }))
{
@Html.CheckBox("WidgetItemComplete", Model.WidgetComplete, new { onClick = "$(this).parent('form:first').submit();" })
}
</td>
</tr>
</tbody>
</table>
实现这一目标的最佳方法是什么?代码示例将不胜感激:)。
感谢。
答案 0 :(得分:2)
这样的事情可以解决问题,因为我已经理解了你正在尝试做的事情。
首先,这是一个css类,如果选中复选框,我会用它来为行着色。
.redBackground
{
background-color: Red;
}
接下来,下面是一些JQuery代码,用于为复选框所在的行着色(如果已选中)。我还添加了一个改变&#39;处理每个复选框的处理程序,如果其中任何一个更新,行颜色会相应更新(我只使用红色表示选中复选框的行,而没有选中复选框的颜色) )。
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function () {
$('input[type=checkbox]').each(function () {
var checkbox = $(this);
// if the checkbox is already checked, colour its row
CheckStatus(checkbox);
//Every time a check-box status changes we
//want to re-evaluate the row colour
checkbox.change(function () {
CheckStatus(checkbox);
});
});
//Method which checks if the check-box is checked. If it's checked
//the row is given the 'redBackground' class, otherwise it is taken away
function CheckStatus(checkbox) {
if (checkbox.attr('checked') == 'checked') {
checkbox.parent().parent().addClass('redBackground');
}
else {
checkbox.parent().parent().removeClass('redBackground');
}
}
});
</script>
希望这有道理......:)
答案 1 :(得分:1)
代码有点小到完全得到你的设置。
从你有一个元素的事实我推断你在表中有多行。 就个人而言,我反对在每一行中都有一个AjaxForm。这似乎是很多开销。
您可以非常轻松地使用单个jQuery代码构造来处理所有行并自行执行必要的任务。
如果你使用jQuery的live函数,你甚至可以独立于添加的行。
复选框或行需要有一个标识符,您可以使用该标识符将ajax调用发送回控制器。成功后,您可以评估复选框的状态并适当地为行着色。
我必须看到更多的代码,真正帮助你。
答案 2 :(得分:0)
也许我错过了什么。这似乎是html或css的工作。据我所知,有几种方法可以根据您的要求来解决这个问题。
在逐行的基础上(也就是说,在应用程序或数据库中静态存储其值之前,您永远不会知道颜色是什么),请分配html样式属性{{ 1}}在行上将<tr style='background-color: @Model.Colour'>
设置为您想要的颜色。
在类型/状态的基础上(即,你知道颜色将提前是什么,但不知道它们将被分配给哪些行),我将为每一行定义一个类:{{ 1}}然后在CSS类中为background-color
分配与Model.Type中的值相同的名称。
要获得该颜色/类型本身,您将要使用您的模型传递它。您可能已经在您的模型上拥有该属性,我不知道。
对于简单的交替模式,simply use this technique或<tr class='@Model.Type'>
和background-color
css选择器。
有时最简单的解决方案是最佳解决方案。