我想批量修改记录。我正在使用此方法的表单集合。
我目前遍历所有项目并使用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>
}
答案 0 :(得分:0)
我认为你应该选择IPagedList。它肯定会成功。由于它具有许多批量数据的功能,如: