我刚开始使用ASP.NET MVC,我突然问自己:为什么ASP.NET首先需要ViewState?FormData实际上是通过回发来控制状态。只有当控件的状态发生更改,且ViewState更改不包括在FormData中时,才需要使用FormData。例如,如果事件处理程序更改了控件的字体颜色,怎么办?
两个问题:
ViewState需要的原因吗?FormData中的控件的属性”?发布于 2014-07-27 04:47:39
MVC和WebForms在这方面有很大的不同。WebForms的目的是帮助WinFroms开发人员轻松地进行web开发。因此,WebForms的基础设施尽可能地模拟状态。ViewState是实现这一功能的方法之一。因为浏览器只回发表单字段,所以在WebForms中整个页面是一个大表单,整个页面被提交到服务器。ViewState是一个隐藏字段,它保存浏览器默认发布的输入、选择等中的数据以外的所有内容。
另一方面,MVC并不试图模拟状态。它更直接地使用HTTP和无状态系统的基本规则。因此,当您发布表单时,只有输入、选择等中的数据才会被发布。没有其他东西能把它送回服务器。
这就是为什么,如果您想在发布后返回更新的数据后的相同视图,您必须使用数据填充ViewModel,就像在原始get方法中那样。MVC不像WebForms那样为您处理这个问题。
发布于 2014-07-26 00:27:19
关于为什么视图状态放在第一位,你的解释是相关的。视图状态用于在Post中持久化状态,主要用于处理更新的属性(例如,带有label和按钮的已更新的编程页面)和按钮的事件处理程序,该按钮的事件处理程序将标签前颜色更改为红色,在页面中加载控件时,启动带有默认颜色的标签,但是当按钮单击它时,将标签颜色更改为红色,并将更改保持在视图状态,因此,如果有任何更改触发回发,则在加载页面加载控件后,它会将前颜色设置为已保存在viewstate中的值。
有关更多详细信息,请查看以下链接topic3
MVC没有视图状态,MVC是基于模型绑定的,所以当表单发布时,MVC框架读取httprequest参数并尝试从该请求创建强类型对象,您可以创建自己的模型绑定器,告诉MVC如何读取http请求
https://stackoverflow.com/questions/24964563
复制相似问题