我在某处读过ASP .NET的事件是基于ASPX页面的View State。提交的控件的值与其视图状态的值匹配,如果发现任何差异,则调用相应的事件。
但我的问题是: “当事件确实基于视图状态而不是触发事件的原因,即使使用EnableViewState = false禁用视图状态。”
谢谢, 师。
答案 0 :(得分:0)
ViewState仅与ASP.NET事件有关。一种更好的表达方式是提交的控件的值与重构页面后找到的相应控件相匹配。基于ViewState 和的组合重新构建页面,如代码前面所定义的页面的原始布局。 (更不用说可以在您自己的页面/控件或第三方自定义控件中的CreateChildControls
虚拟方法中在服务器端创建控件)
至于你的问题,我的猜测是事件被触发,因为触发事件的控件不是基于状态的 - 它们在代码前面是静态定义的并且始终可用。
相比之下,某些控件是即时创建的。例如,如果您将Repeater
与ItemTemplate
结合使用,则可以在项目模板中放置一个按钮。转发器中的项目取决于其DataSource中的值,而不是代码前端。因此,如果您在此方案中禁用ViewState,您确实会搞乱事件处理。
答案 1 :(得分:0)
如果您真的想了解ViewState,请阅读本文......
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx
这是官方的@ msdn ... http://msdn.microsoft.com/en-us/library/ms972976.aspx
我可以说的是...尝试浏览我刚刚分享的第一个链接......在该文章的最后,您将回答所有问题。我认为这是关于这个主题的最佳文章。
简短的回答是......事件将永远存在,因为页面生命周期应该按照特定的顺序排列!这就是无论视图状态是打开还是关闭。