Update multiple records at once in asp.net mvc

前端 未结 1 795
小蘑菇
小蘑菇 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++)
      {
        
        
          
            @Html.HiddenFor(m => m.DueList[i].id)
            @Html.DisplayFor(m => m.DueList[i].flat)
          @Html.DisplayFor(m => m.DueList[i].name)
          @Html.TextBoxFor(m => m.DueList[i].due)
        
      }
      
    }
    

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

    The next problem is that the model in the view is not typeof List, but it does contain a property named DueList, which is typeof List 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)
提交回复
热议问题