我发现MVC中没有视图状态。
关于视图状态,我有两个问题。
第一个问题:
在经典网页表单中,Viewstate用于在往返期间保持控制状态。即使我不明白这一点。我在某处阅读,如果我在页面中禁用viewstate,所有表单控件将在回发后被清除。我认为这不是需要视图状态的正当理由。 ASP.net引擎可以在没有viewstate的情况下处理这种情况(mainatianing状态)。
和我的第二个问题:MVC的哪个部分正在处理视图状态责任。
此致 Ramana Akula。
答案 0 :(得分:3)
不需要ViewState,因为没有服务器端控件(至少不应该)。
这很简单。
服务器端控件使用ViewState跟踪(在某些情况下所有)在页面回发时需要还原的属性值。同样,它是可以触发服务器端事件(例如TextChanged
)的机制 - 服务器重新保存asp:TextBox
的{{1}}值,就像ViewState保存到的那样页面,并将其与POST回来的值进行比较 - 如果它不同,则触发该事件。例如。
事实上,ViewState是一个非常聪明的解决方案......但我不得不说我讨厌它。
在MVC中,当呈现文本框(或者,我应该说是HTML输入Text
)然后提交回来时,它的值将从请求重新绑定。然后,在服务器上,您将重新构建再次构成视图所需的数据。
我现在已经写了很多MVC网站 - 我甚至都没有需要打开会话状态。
如果你来自Asp.Net Forms,它起初可能完全令人难以置信(这实际上取决于你对HTML的普遍使用程度),但最终还是令人难以置信的解放;并且显然会对性能产生巨大影响。
答案 1 :(得分:0)
明白了。我的观念是错误的。
视图状态用于使用有效数据重新构造服务器端控件属性。相关功能由MVC中的模型绑定处理。