MVC 3在db中保存复选框状态

时间:2013-04-11 18:05:37

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

我有一个问题,我希望有人有时间看。我在mvc 3测试项目中查看了表格。里面的桌子有复选框。每当我点击它们时,我都会尝试保存这些复选框。我尝试使用java脚本,尝试了很多来自互联网的例子,但对我来说仍然没有运气。有人可以帮忙吗? :)

这是我的观点:

@foreach (var item in Model)
{
    <tr>

        <td>
            @Html.DisplayFor(modelItem => item.date)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.section)
        </td>
        <td>

  @Html.CheckBoxFor(modelItem => item.check, new { onclick = "SomeMethod(this)" });

</td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.idImovine }) 

           </td>
    </tr>
}

</table>


<script type="text/javascript">

   function SomeMethod(checkboxInput) {

        $.ajax({
            type: 'POST',
            url: 'Home/Action',
            data: { newValue: checkboxInput.checked },
            success: success,
            dataType: 'json'
        });
    }

</script>

这是我的控制器

   public JsonResult Action(bool newValue)
        {

            var model = con.pro.Single(r => r.id == id);


            TryUpdateModel(model);
            con.SubmitChanges();

            return Json(true)


        }

我正在使用linq to sql访问db。有人可以告诉我我做错了什么,我的意图是在点击时将复选框保存在dv中,但是该复选框被点击在一个来自视图的表中,它需要保存到另一个tabe,所以我我猜我需要传递视图内部的id,以及复选框值。

3 个答案:

答案 0 :(得分:2)

您可能需要传递复选框所代表的记录的ID。所以让我们像这样更新您的剃刀代码。

@foreach (var item in Model)
{
  <tr>
    <td>
      @Html.CheckBoxFor(modelItem => item.check,
                                              new { @id=item.ID, @class="chks"});
   </td>
  </tr>
}

现在我们将有一些非营养的javascript,它会侦听复选框的点击事件

<script type="text/javascript">
  $(function(){

       $(document).on("click","input.chks", function (e) {
           var _this=$(this);
           var isChecked = _this.is(':checked');
           $.post("@Url.Action("Update","Home")?id="+_this.attr("id")+
                                          "&newValue="+isChecked,function(data){
                 // do something with the response
           });

       });
  });

</script>

现在确保您的Update方法正在接受2个参数

[HttpPost]
public ActionResult Update(int id,bool newValue)
{
   //do your saving here.
  return Json(true); 
}

答案 1 :(得分:1)

如果您使用的是POST,则应相应地标记您的操作

[HttpPost]
 public JsonResult Action(bool newValue)

答案 2 :(得分:1)

您需要在模型中使用Id,然后在您的视图中执行此操作:

@Html.CheckBoxFor(modelItem => item.check, 
    new { @dataid = item.Id, onclick = "SomeMethod(this)" });

然后像这样做你的ajax帖子:

function SomeMethod(checkboxInput) {
    $.ajax({
        type: 'POST',
        url: 'Home/Action',
        data: { newValue: $(checkboxInput).is(':checked'), id: $(checkboxInput).attr('dataid') },
        success: success,
        dataType: 'json'
    });
}

并在你的控制器中接受它:

public JsonResult Action(bool newValue, int id)
{
    // do your saving here
}