返回索引时,模型不会更新

时间:2012-02-24 20:26:35

标签: asp.net-mvc-3

模型填充在ctor中。 当我单击编辑以编辑项目时,一切正常,我可以清楚地看到在TryUpdateModel()调用之后模型已在模型中更新。

但是,当它重定向到索引时,Models不再具有我的更改。发生了什么?

        // GET: /Contact/    
        public ActionResult Index()
        {
            return View(Models);
        }


        // GET: /Contact/Edit/5    
        public ActionResult Edit(int id)
        {
            var contactModel = Models.Find((x) => x.ID == id);
            return View(contactModel);
        }

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            var contactModel = Models.Find((x) => x.ID == id);
            if (TryUpdateModel(contactModel))
            {
               return RedirectToAction("Index");   
            }

            return View(contactModel);

        }

3 个答案:

答案 0 :(得分:0)

我相信您只是从编辑调用中更改了内存中的模型,但未将更改保存到持久存储(数据库),因此您的ctor正在从未保存的状态重新加载它。

答案 1 :(得分:0)

这取决于您使用什么来保存模型(将它们保存到数据库)。在我的情况下,我遇到了同样的问题,我必须确保在重定向之前我使用UpdateSave方法调用了一些东西,因为我的模型会话的范围是HTTP请求,重定向没有导致我的会话被刷新,并且保存了更改。

在我的情况下,我使用的是nHibernate,最后在动作完成后添加了一个属性,我刷新了我的更改。

答案 2 :(得分:0)

html助手默认在帖子上使用ModelState。它假定如果没有重定向,则必定存在错误,因此显示“旧”值。

您必须清除模型状态(ModelState.Clear())或提出不同的模式:)