mvc4复选框更新数据库

时间:2014-05-21 01:38:48

标签: c# asp.net razor checkbox

我从互联网上的某个地方做了一个例子(我不记得它在哪里)并将它放入我的应用程序中。代码可以工作,但不完全符合我的要求,我似乎无法弄清楚如何完成它。

下面的代码采用所有选中的复选框,并在应该的位置更新数据库。大!但是,取消选中复选框后,无法将数据库中的字段从开启更改为关闭。

我怀疑我将不得不做一个完整的代码重写,但这是我目前所拥有的。

查看:

  @foreach (var item in Model)
        {
            <tr>
                @Html.HiddenFor(modelItem => item.id)

                <td class="selectAll">
                    <input type="checkbox" name="complete" value="@item.id"/>

                </td>
            </tr>
         }

控制器:

 [HttpPost]
    public ActionResult Complete(FormCollection c)
    {

        int i = 0;
        if (ModelState.IsValid)
        {

            var DelIDArray = c.GetValues("item.id");
            var DelCompleteArray = c["complete"];

            for (i = 0; i < DelIDArray.Count(); i++)
            {
                string find = DelIDArray[i].ToString();
                deliverylist dels = db.deliverylists.Find(Convert.ToInt32(DelIDArray[i]));
                dels.is_complete = Convert.ToInt32(DelCompleteArray[i]);
                               }
            db.SaveChanges();
        }
        return RedirectToAction("Complete");

    }

2 个答案:

答案 0 :(得分:0)

只有在您提交表单时才会触发控制器代码。

当单击其中一个复选框时,您可以使用异步方法(jquery)来调用更新代码,但是当您只需要更新一个复选框时,它会对所有复选框进行评估。

正如您所料,如果您希望它能够异步工作,还有一些工作要做。以下是关于一起使用mvc4 / webapi / jquery的一些入门知识:

http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC-and-WebAP

答案 1 :(得分:0)

下面的代码让我了解并且我可以继续工作但是我知道这不对,我正在寻找合适的解决方案。

我以2为增量输入n的原因是因为“complete”复选框数组收集了所有的false复选框,并添加了真正的复选框,同时抛出了对齐方式。 (如果这是有道理的)

这是我第一次使用复选框

更新数据库

查看:

@foreach (var item in Model)
    {
        <tr>
            @Html.HiddenFor(modelItem => item.id)

            <td class="selectAll">
                 @if (item.is_complete == 1)
                 {
                   @Html.CheckBox("complete", true, new { id = item.id, @value = item.id })

                  }
                  else
                  {
                     @Html.CheckBox("complete", new { id = item.id, @value = item.id })

                   }
            </td>
        </tr>
     }

控制器:

[HttpPost]
public ActionResult Complete(FormCollection c)
{

    int i = 0;
    if (ModelState.IsValid)
    {

        var DelIDArray = c.GetValues("item.id");
        var DelCompleteArray = c["complete"];

        var n = 0;
        for (i = 0; i < DelIDArray.Count(); i++)
        {
            string find = DelIDArray[i].ToString();
             deliverylist dels = db.deliverylists.Find(Convert.ToInt32(DelIDArray[i]));
                if (c.GetValues("complete")[n] == "false")
                {
                    dels.is_complete = 0;
                    n = n + 1;
                }
                else
                {
                    dels.is_complete = 1;
                    n = n + 2;
                }
                db.Entry(dels).State = EntityState.Modified;
        }
        db.SaveChanges();
    }
    return RedirectToAction("Complete");

}