2017-10-02 10 views
1

これは私が使用しているクラスです。私はdbの最初のアプローチを使用しました。asp.net mvcの特定のフィールドを更新するには

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); 
} 

上記のコードでわかるように、レコードのすべてのフィールドが更新されます。ただし、nameフィールドとdescフィールドのみを更新したいとします。私はこれをどのようにするべきですか?私もこれをやっているので、説明も理解される新しいです。ありがとうございました。

+0

をデータを編集するためには、常に[MVCのViewModelとは何ですか?](https://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)というビューモデルを使用します。あなたのPOSTメソッドでは、IDに基づいてデータモデルを取得し、ビューモデルから必要なプロパティのみを更新します。 –

答えて

0

このような何かあなたがのviewmodel、ビューに必要なプロパティのみを持つ別のクラスを必要とし、あなたがパラメータとしてアクションでそれを得るときあなたは、実際のエンティティにマップ:あなたの

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"); 
    } 
... 
+0

'var ent = db.Get(input.id);'はどういう意味ですか? – AyakoS

+0

これは擬似コードなので、dbクラスのId/keyでエンティティを取得する方法が分かりません。 – Omu

+1

はEFで 'db.Set ().SingleOrDefault(o => o.id == input.id) ' – Omu

関連する問題