如何更新asp.net mvc中的特定字段

时间:2017-10-02 17:50:27

标签: asp.net-mvc entity-framework-6

这是我正在使用的课程。我使用了db第一种方法。

public partial class Ingredient
{
    public int id { get; set; }
    public string name { get; set; }
    public string desc{ get; set; }
    public byte is_deleted { get; set; }
    public int Ingredient_Type_id { get; set; }
    public int UOM_id { get; set; }
}

我有这个代码,脚手架更新记录。

public ActionResult EditDetails(Ingredient ingredient)
{           
   if (ModelState.IsValid)
   {
      db.Entry(ingredient).State = EntityState.Modified;
      db.SaveChanges();
      return RedirectToAction("Index");
   }
   ViewBag.UOM_id = new SelectList(db.Unit_Of_Measurement, "id", "name", ingredient.UOM_id);
   ViewBag.Ingredient_Type_id = new SelectList(db.Ingredient_Type, "id", "name", ingredient.Ingredient_Type_id);
   return View(ingredient);
}

根据我在上面的代码中看到和理解的内容,它会更新记录中的所有字段。但是,我只想更新namedesc字段。我该怎么做?我也是这样做的新手,所以我们也会感激解释。谢谢。

2 个答案:

答案 0 :(得分:0)

你需要一个viewmodel,另一个只有你在视图中需要的属性的类,当你在action中作为参数得到它时,你将它映射到这样的实际实体:

public class IngredientInput
{
    public int id { get; set; }
    public string name { get; set; }
    public string desc{ get; set; }
}

public ActionResult EditDetails(Ingredient input)
{           
   if (ModelState.IsValid)
   {
      var ent = db.Set<Ingredient>().SingleOrDefault(o => o.id == input.id)
      ent.name = input.name;
      ent.desc = input.desc;
      db.SaveChanges();
      return RedirectToAction("Index");
   }
...

答案 1 :(得分:0)

您可以简单地避免更新其他字段。要实现这一点,您应该在实体状态修改声明下定义您不想更改的属性。所以问题的答案是:

                if (ModelState.IsValid)
            {
                db.Entry(ingredient).State = EntityState.Modified;
                db.Entry(ingredient).Property("is_deleted").IsModified = false;
                db.Entry(ingredient).Property("Ingredient_Type_id").IsModified = false;
                db.Entry(ingredient).Property("UOM_id").IsModified = false;
                db.SaveChanges();
                return RedirectToAction("Index");
            }