asp.net mvc将复选框值保存到数据库

时间:2011-05-12 07:31:19

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

我有一个简单的mvc项目,由一个名为Persons的表组成,该表有一些属性,如name,age,surname等。

我最近在table中添加了一个属性,它在SQL中是bit的类型,在C#中是bool,对我来说它代表了一些状态。如果没问题,我将该状态设置为true或false。

在一个控制器中,我在数据库中创建了我的人员的索引视图,并将状态显示为复选框。那工作正常。我想要做的是更改状态,如果我单击该复选框而不是使用所有属性的编辑视图。 我只想将复选框值从索引视图保存到数据库。

有些人建议我在我的控制器中创建一个动作,如下所示:

public ActionResult Save(int id, bool status){}

我的人员id id的位置status是我点击的checkbox的值。

那么如何用jquery,ajax或javascript调用该函数并发送这些参数? 我对ajax并不是很好,有点害怕它:)

还有一件事我只能通过这种方式从我的数据库中显示复选框值:

@Html.CheckBox("somename", item.Status)
        <input name="somename" type="hidden" value="false"/>

任何帮助或建议或指导我的方向都很好!

1 个答案:

答案 0 :(得分:2)

您有几种选择。一种方法是将复选框放在(普通)表单中,然后使用jQuery Form plugin对表单进行Ajax化:

@using(Html.BeginForm()) {
    @Html.Checkbox(...)
}

<script type="text/javascript">
    $(document).ready(function () {
        $('form').ajaxForm({
            success: Saved,
            error: HandleError
        });
    });

    function Error(response, status, err) {
        // code to handle error here
    }

    function Saved(responseText, statusText, xhr, $form) {
        // code to handle succes, if any
    }
</script>

当然,您也可以使用@Ajax.BeginForm,但这样做的好处是可以轻松降级。只需删除jQuery表单初始化,你就可以获得一个常规表单:)

另一种可能性是简单地使用@Ajax.ActionLink。我写了blog post on how to deal with Ajax.ActionLink,我认为会帮助你。

您问题上的控制器操作签名看起来是正确的:

public ActionResult Save(int id, bool status){}

其他选项实际上是创建一个Settings视图模型(称之为你想要的),并且在那里只有一堆bool属性来表示复选框:

public class Settings
{
    public bool Status { get; set; }
    // more properties here
}

然后您可以将您的操作绑定到Settings对象:

public ActionResult Save(int id, Settings settings){}

如果您最终有多个要绑定的复选框,这将派上用场。