ASP.NET MVC3中POST之后,页面内容无法更改

mvc3教程

  有朋友问到,说在MVC3中,如果使用表单提交数据后,会发现一个问题,就是在提交表单后,即使在控制器中对表单中提交的数据做了更改,在新的视图中也无法将修改后的内容显示出来,显示的还是表单提交前的数据。

  这个问题如果在处理完数据之后,跳转到其他页面的时候,是能够正常显示的,说明数据已经更新了。

  朋友因此非常不解,为什么会出现这种情况呢?我们来看看下面这些代码。

 

  Controller中的代码如下:

[HttpPost]

public ActionResult PostDisposeMethod(PageFormDataModel model)

{

    var m = model;

    m.PropertyName = "Controller中修改了的数据。"; // 这里假设PropertyName就是PageFormDataModel对象的一个属性,类型为string

    return View(m);

}

在视图中的代码很简单了:

@using(Html.BeginForm())

{

    这里放些生成表单的代码。。。

}

  其实这个问题的原因在于MVC3中,使用ModelState的对象数据,在Cotroller中,我们一旦初始化了ModelState之后,无论我们对对象怎么操作,在放入视图都不会有任何效果。视图默认使用的是ModelState的初始化数据,如果要改变种情况,就要让ModelState感觉到我们修改了。这样视图的参照就会提取新的数据。

  操作起来有两种方式:1. 直接清除ModelState;2.修改ModelState中数据。这两种方法都是让ModelState的状态改变。

  直接清除ModelState比较简单,MVC中提供Clear方法,只要在return View(m);之前调用ModelState.Clear()即可。

  如果在不能清除数据的情况下,如果要更新,可以对ModelState修改下,比如:

  ModelState["PropertyName"] =ModelState["PropertyName2"];

Thursday, June 28, 2012 | .NET技术

文章评论

No comments posted yet.

发表评论

Please add 4 and 3 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,常年游弋于电子商务,属于互联网行业分类中的杂牌军。当前正在待业中...