「Store」テーブルを編集するビューがあります。これはすべて問題ありませんが、ビューにはすべてのフィールドが表示されず、保存しようとすると、ビュー投稿にないフィールドを空白にすることはできないというエラーがスローされます。もちろん、これらのフィールドは上書きされるとは想定されていません。ビューはそれらを編集していません。
ここに私の投稿機能があります
[HttpPost]
public ActionResult Edit(Store storeModel) {
if (ModelState.IsValid) {
Store storeContext = database.Stores.Find(storeModel.ID);
database.Entry(storeContext).CurrentValues.SetValues(storeModel);
database.SaveChanges();
}
}
オンラインで検索すると、明らかに問題は、フィールドがポストバックに存在しない場合でも、MVC が編集中のフィールドを認識せず、すべてのフィールドを編集済みとして扱うことです。ビューで編集しているフィールドを「伝える」には、次のようにする必要があります。
//Store contextStore = new Store { ID = postBackStore.ID };
//database.Stores.Attach(contextStore );
//contextStore .Name = postBackStore.Name;
//contextStore .Address = postBackStore.Address;
//contextStore .City = postBackStore.City;
//contextStore .Postal = postBackStore.Postal;
//contextStore .Phone = postBackStore.Phone;
//contextStore .StoreNumber = postBackStore.StoreNumber;
//contextStore .IsActive = postBackStore.IsActive;
//database.Entry(contextStore).State = EntityState.Modified;
ただし、MVC は既に Store オブジェクトを追跡しており、同じ ID で新しいオブジェクトを作成できないと不平を言うため、これはうまくいきませんでした。また、ビューで既にフィールドを定義しているときに、すべてのフィールドを再度定義する必要があるのも好きではありません。
ビューにあるフィールドを明示的に定義しなくても、(モデル内のすべてのフィールドとは対照的に) ビュー内のフィールドのみに変更を保存する MVC を持つことができる方法はありますか?