了解ViewState和FormData

时间:2014-07-25 21:12:01

标签: asp.net asp.net-mvc forms viewstate

我刚刚开始使用ASP.NET MVC,我突然问自己:为什么ASP.NET首先需要ViewStateFormData实际上是在回发中保持状态。仅当控件的状态发生更改且更改未包含在FormData 中时,才需要ViewState。例如,如果事件处理程序更改了控件的字体颜色怎么办?

两个问题:

  • 对于WebForms,是否需要ViewState
  • 如果是,MVC如何“维护不属于FormData”的控件属性?

2 个答案:

答案 0 :(得分:0)

关于View State的原因,您的解释是相关的。 View State用于在Post Posts中保持状态,主要用于处理属性更新的程序,例如带有标签和按钮的页面,并且您有按钮的事件处理程序,用于将标签正面颜色更改为红色,在页面中加载控件启动标签但是当使用默认颜色时,按钮单击它会将标签颜色更改为红色,并将该更改保持在视图状态,这样如果有任何事情触发回发,那么在页面加载中加载控件后,它会将前面颜色设置为已保存在内部的值。 viewstate

有关详细信息,请查看以下链接http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic3

MVC没有viewstate,MVC基于模型绑定,因此当发布表单时,MVC框架读取httprequest参数并尝试从该请求创建强类型对象,您可以创建自己的模型绑定器来告诉MVC如何阅读http请求

答案 1 :(得分:0)

MVC和WebForms在这方面有很大的不同。 WebForms的目的是帮助WinFroms开发人员轻松进行Web开发。因此,WebForms的基础结构可以随时模拟状态。 ViewState是实现此方法之一。由于浏览器只回发表单字段,因此在WebForms中,整个页面是一个大表单,整个页面都发布到服务器。 ViewState是一个隐藏字段,它保存所有内容,但输入,选择等数据默认为浏览器发布。

另一方面,MVC不会尝试模拟状态。它更直接地与HTTP和无状态系统的基本规则一起工作。因此,当您仅发布表单时,输入,选择等中的数据将被发布。没有别的东西能回到服务器上。

这就是为什么,如果您想在包含更新数据的帖子后返回相同的视图,则必须使用原始get方法中的数据重新填充ViewModel。 MVC不像WebForms那样为你处理这个问题。