MVC Razor Post更新列表



我的模型如下:

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。

最新更新