Update multiple records at once in asp.net mvc

前端 未结 1 787
小蘑菇
小蘑菇 2020-11-30 09:00

I\'m trying to make a website using asp.net mvc 4 & EF6 where I want to update multiple rows all at once. But for some reason, it\'s not workin

相关标签:
1条回答
  • 2020-11-30 09:52

    Your first problem is that your use of a foreach loop is generating duplicate name attributes, which will not bind to a collection, and as a result the BillLists parameter will always be an empty collection (its also generating duplicate id attributes which is invalid html). You need to use a for loop or a custom EditorTemplate for typeof BillCheck. Using a for loop, your view need to be

    using (Html.BeginForm("MakeDue", "Home"))
    {
      @Html.ValidationSummary(true)
      @for(int i = 0; i < Model.DueList.Count; i++)
      {
        
        <tr>
          <td>
            @Html.HiddenFor(m => m.DueList[i].id)
            @Html.DisplayFor(m => m.DueList[i].flat)</td>
          <td>@Html.DisplayFor(m => m.DueList[i].name)</td>
          <td>@Html.TextBoxFor(m => m.DueList[i].due)</td>
        </tr>
      }
      <input type="submit" class="btn btn-success" value="Update" />
    }
    

    Note also that the @Html.HiddenFor() helper need to be inside a <td> element in order to be valid html.

    The next problem is that the model in the view is not typeof List<BillCheck>, but it does contain a property named DueList, which is typeof List<BillCheck> so your POST method needs to be

    public ActionResult MakeDue(YourModel model)
    

    where YourModel is the class name you used to generate the view (i.e. in the @model ??? statement). Then you loop in the controller method need to be

    foreach (var BillId in model.DueList)
    {
      var getDue = db.BillChecks.Where(p => p.id == BillId.id).FirstOrDefault();
      if (getDue != null) // add this
      {
        getDue.due = BillId.due;
      }
    }
    db.SaveChanges();
    

    Note also the addition of the if (getDue != null) check.

    Side note: Your are checking if (ModelState.IsValid). It is recommended you return the view if ModelState is not valid so that the user can correct any errors.

    0 讨论(0)
提交回复
热议问题