在MVC5中一次编辑多个记录

时间:2017-07-12 14:47:15

标签: asp.net-mvc asp.net-mvc-5

我想批量修改记录。我正在使用此方法的表单集合。

我目前遍历所有项目并使用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");
    }

这是我的观点

    @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>
}

1 个答案:

答案 0 :(得分:0)

我认为你应该选择IPagedList。它肯定会成功。由于它具有许多批量数据的功能,如:

  1. 大量数据的分页。
  2. 可以设置样式
  3. 所有关于列表的内容都可以通过Pagination轻松完成。
  4. 还有许多其他功能,例如添加Css,获取隐藏值等等。