1

我有一个问题,我希望有人有时间看看。我在我的 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 访问数据库。有人可以告诉我我做错了什么吗,我的目的是在单击时将复选框保存在 dv 中,但是在来自视图的表中单击了该复选框,并且需要将其保存到另一个表中,所以我我猜我也需要传递内部视图的 id 以及复选框值。

4

3 回答 3

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); 
}
于 2013-04-11T18:18:07.947 回答
1

如果您使用的是 POST,那么您的操作应相应标记

[HttpPost]
 public JsonResult Action(bool newValue)
于 2013-04-11T18:08:15.123 回答
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
}
于 2013-04-11T18:21:08.847 回答