你应该如何处理控制器中动态列表的更改?

时间:2016-05-13 06:05:16

标签: asp.net-mvc entity-framework

因此,假设我有一个将列表属性UserContext.ServicesList传递给控制器​​的视图。用户可能已经有一个现有列表,我们希望将更改的记录更新到该列表。最佳方法是什么:

1)删除从列表中删除的记录?

2)更新现有记录?

3)添加新记录?

谢谢!

示例类

public class UserPage
{
    [Key]
    public string Id { get; set; }

    [ForeignKey("Id")]
    public ApplicationUser User { get; set; }

    [DataType(DataType.MultilineText)]
    public string AboutMe { get; set; }

    [DataType(DataType.MultilineText)]
    public string AvailableTime { get; set; }

    public List<Services> ServicesList { get; set; }

}

public class Services
{
    [Key]
    public int ServiceId { get; set; }

    public string Id { get; set; }

    [ForeignKey("Id")]
    public ApplicationUser User { get; set; }

    public string ServiceName { get; set; }
}

示例控制器

[HttpPost]
public ActionResult Edit(UserPage UserContext)
{
    if (ModelState.IsValid)
    {
        if (UserContext.ServicesList != null)
        {
            foreach (var item in UserContext.ServicesList)
            {
                // What do I do here?
            }
        }
        db.Entry(UserContext).State = EntityState.Modified;
        db.SaveChanges();   
        return RedirectToAction("Index");
    }
    return View(UserContext);
}

2 个答案:

答案 0 :(得分:0)

您不需要更新现有记录。所以,您只需删除已删除的一个&amp;添加新内容。

foreach (var item in UserContext.ServicesList)
{
    if(item.ServiceId == exists)
    {
        //Check the values & Update if needed else leave
    }
    else
    { 
        //Remove or Add
    }
}

答案 1 :(得分:0)

我会删除ServiceList的所有记录,然后重新添加来自表单帖子的记录,如

[HttpPost]
public ActionResult Edit(UserPage UserContext,int id)
{
    if (ModelState.IsValid)
    {
        if (UserContext.ServicesList != null)
        {
            var dbList = db.Services.Where(x=>x.User.Id == id);
            foreach(var item in dbList){
              db.Services.Remove(item)
            }
            foreach (var item in UserContext.ServicesList)
            {
                db.Services.Add(item);
            }
        }
        db.Entry(UserContext).State = EntityState.Modified;
        db.SaveChanges();   
        return RedirectToAction("Index");
    }
    return View(UserContext);
}

它只是让事情变得简单。否则,您必须每次比较,删除了多少记录,新的记录数量和新记录数量。简单易行的方法是删除旧列表并重新添加。我不仅在EF中,而且在普通的ADO.Net

中都观察到了这种模式