我的模型如下:
public class Product
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
索引控制器如下:
public ActionResult Index(int id)
{
return View(GetProducts()); //Get Product return List
}
我的帖子控制器如下:它正在张贴整个列表。我只需要更新的记录。
public ActionResult Update(List<Prouct> Proucts)
{
}
查看如下:
@model List<Product>
@using (Html.BeginForm("Update", "Product", FormMethod.Post, new {Proucts=Model})) {
for (var i = 0; i < Model.count(); i++)
{
@Html.HiddenFor(v => Model[i].Id)
@Html.TextBoxFor(m => Model[i].Name)
</div>
<button type="submit" title="Save">
}
因此,当发布后,发布整个列表(包括更新)。例如如果有100种产品,它将回到100。即使我更改了1或没有。所以我必须再次更新。
有没有发布更改记录的方法?
尚无功能,可以使用剃刀页进行操作。
您最好的选择是制作一些JavaScript代码来检测并仅发布在浏览器上更改的输入字段。
通过StackoverFlow进行的简单搜索将产生一些可能帮助实现这一目标的解决方案:
- 与jQuery -jQuery如何仅提交在表单具有某些数据数组 时更改字段
- 没有 - 使用预填充的表格,仅提交更改的字段
我不确定在客户端(jquery,javaScript)会有所帮助。但是在服务器端,您可以在MehTOD Public ActionResult更新(列表proucts)中进行。
public ActionResult UpdatePerson(List<Person> Proucts)
{
var dbProductsList = GetProducts(); //Get Product List
foreach (var product in Proucts)
{
if (!dbProductsList.Where(x => x.Name == product.Name).Any())
{
dbContext.Update(product);
dbContext.SaveChanges();
}
}
return View();
}
对于您的客户端,您应该去Ajax。