0

我有一个编辑“存储”表的视图。这一切都很好,但是视图不会显示所有字段,当我尝试保存时,它会抛出错误,说不在视图帖子中的字段不能为空白。好吧,当然,但是这些字段无论如何都不应该被覆盖,视图没有编辑它们。

这是我的帖子功能

[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 仅将更改保存到视图中的字段(与模型中的每个字段相反),而不必明确定义视图中的字段吗?

4

1 回答 1

0

为什么不使用仅参与字段的视图模型?

于 2013-03-26T17:11:08.147 回答