更改表中给定行的背景颜色

时间:2011-08-25 09:12:55

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 jquery

我需要根据@ 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>

实现这一目标的最佳方法是什么?代码示例将不胜感激:)。

感谢。

3 个答案:

答案 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选择器。

有时最简单的解决方案是最佳解决方案。