【发布时间】:2011-03-30 11:46:23
【问题描述】:
我正在尝试清理一个旧的 ASP.NET WebForms 站点,该站点在任何地方都启用了 ViewState。这是一个性能问题 - 巨大的视图状态会导致明显的提交延迟。但是除了一些复杂的控件和表单数据之外,大多数表单似乎并不真正需要 ViewState。但是,即使没有输入控件的表单也会生成大视图状态,因为我猜 asp.net 正在存储关于每个服务器控件的各种元数据。但是可见性状态等都是在代码中控制的,所以我想我可以消除很多。
将EnableViewState="false" 添加到每个不需要它的控件(在页面中并在代码中创建)是非常繁重的,所以我试图在页面/控件级别禁用它,并有选择地启用它对于需要它的东西。 (是的,我意识到这是有风险的,但实际上只有几个大表格和几个模板,如果解决了就会有很大的不同。
这是我不太明白的。
如果一个控件或页面有EnableViewState="false" 它的<%.. %> 描述符,或者在它在父页面中创建它的标记中,一切都会中断,因为在代码中添加的任何ViewState 数据都不起作用。所以我似乎能够在控制级别启用它,但是将每个容器中的包装器控件设置为 EnableViewState 为 false,然后在每个控制级别设置 ViewStateMode=true(覆盖它)。
我没有得到的是在以下情况下会发生什么:
ViewStateMode = ViewStateMode.Enabled 和
EnableViewState = false 用于包含其他控件的控件。
用于控制。 ViewStateMode 仍然可以启用内部控件吗?基本上,当它们发生冲突时,哪个设置有最终决定权?
对于每个容器,我希望能够禁用包装控件中的所有内容,但仍要确保:
1) 代码工作中的 ViewState 设置,以及
2) 默认情况下所有控件的 ViewState 都是禁用的,并且
3) 我可以选择性地为子控件启用 ViewState。
这似乎令人困惑。如果我在母版页中有一个包装控件设置为EnableViewState="false",但随后将一个子控件设置为ViewStateMode="Enabled",它就会中断。根据 MS 的说法,ViewStateMode 应该取代任何外部 ViewState 设置,但它似乎不起作用。
【问题讨论】:
-
如果您提供一条关键信息,这个问题就非常容易回答:ASP.NET 的版本是什么?