我有一个编辑“存储”表的视图。这一切都很好,但是视图不会显示所有字段,当我尝试保存时,它会抛出错误,说不在视图帖子中的字段不能为空白。好吧,当然,但是这些字段无论如何都不应该被覆盖,视图没有编辑它们。
这是我的帖子功能
[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 仅将更改保存到视图中的字段(与模型中的每个字段相反),而不必明确定义视图中的字段吗?