2017-07-12 8 views
-1

レコードを一括編集したいです。私はこのメソッドのフォームコレクションを使用しています。MVC5で複数のレコードを一度に編集するには

現在、すべてのアイテムをループしています。すべてのアイテムを配列に格納するには、GetValuesメソッドを使用します。

私のリストが大きくなるとそれは遅くなる可能性があるので、私はこのようにしたくありません。それで、配列/リストを小さくして、変更されたものだけを格納するためには、私は何をする必要がありますか?ここ

[HttpPost] 
    public ActionResult Index(FormCollection c) 
    { 
     int i = 0; 
     if(ModelState.IsValid) 
     { 
      var ProductIDArray = c.GetValues("item.Id"); 
      var ProductReviewStatus = c.GetValues("item.ReviewStatus"); 

      for (i = 0; i < ProductIDArray.Count(); i++) 
      { 
       ProductViewModel prod = db.Product.Find(Convert.ToInt32(ProductIDArray[i])); 
       prod.ReviewStatus = (StatusOfReview)Enum.Parse(typeof(StatusOfReview), ProductReviewStatus[i], true); 
       db.Entry(prod).State = EntityState.Modified; 
      } 
     } 
     db.SaveChanges(); 
     //return View(db.Product.ToList()); 
     return RedirectToAction("Index"); 
    } 

そして、私はあなたがIPagedListで行くべきだと思う私の見る

@model IEnumerable<Test_ListDrop.Models.ProductViewModel> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 

@using (Html.BeginForm()) 
{ 
    <table class="table"> 
     <tr> 
      <th> 
       @Html.DisplayNameFor(model => model.Name) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Cost) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.OutOfStock) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.ReviewStatus) 
      </th> 
      <th></th> 
     </tr> 

     @foreach (var item in Model) 
     { 
      <tr> 
       <td> 
        @Html.HiddenFor(modelItem => item.Id) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Name) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Cost) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.OutOfStock) 
       </td> 
       <td> 
        @Html.EnumDropDownListFor(model => item.ReviewStatus, htmlAttributes: new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => item.ReviewStatus, "", new { @class = "text-danger" }) 
       </td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new { id = item.Id }) | 
        @Html.ActionLink("Details", "Details", new { id = item.Id }) | 
        @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
       </td> 
      </tr> 
     } 
     <tr> 
      <td colspan="4"> 
       <input type="submit" value="Submit" /> 
      </td> 
     </tr> 

    </table> 
} 
+0

は、それが役立つかもしれない、ここを見て:https://www.codeproject.com/Articles/1191769/Beginners-ありがとうございます。実装のためのガイド - AJAX-CRUD-Operati –

+0

ありがとうございます。 IPagedListを使用すると解決策のようです – CB4

+0

簡単な質問。 DropDownListForのデフォルト値をデータベースで選択された値に設定するにはどうすればよいですか? 私は現在このようにしています。 'var currentStatus = a.ReviewStatus; @ Html.DropDownListFor(モデル=> a.ReviewStatus、新しいSelectList(a.ApplicationReviewStatusList、currentStatus)、新しい{@class = "フォームコントロール"、@スタイル= "幅:150px;高さ:30px"}) @ Html.ValidationMessageFor(model => a.ReviewStatus、 ""、new {@class = "text-danger"}) ')が動作しません。 – CB4

答えて

0

です:

おかげでここ

は私のコントローラです。それは確かにトリックを行うでしょう。

  1. 膨大な量のデータをページ分割するような、大量のデータのための多くの機能を備えています。
  2. スタイリングが可能です。
  3. また、すべてのリスティングについては、ページネーションで簡単に行うことができます。
  4. とCSSを追加するなどの他の機能の多く隠された値などを取得し、可能..です
関連する問題