首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >最小化视图状态-被asp.net 4.0中的`EnableViewState`和`ViewStateMode`混淆

最小化视图状态-被asp.net 4.0中的`EnableViewState`和`ViewStateMode`混淆
EN

Stack Overflow用户
提问于 2011-03-30 19:46:24
回答 1查看 12.1K关注 0票数 17

我正在尝试清理一个到处都启用了ViewState的旧ASP.NET WebForms站点。这是一个性能问题--巨大的视图状态会导致明显的提交延迟。但是,除了一些复杂的控件和表单数据之外,大多数表单似乎并不真正需要ViewState。然而,即使没有输入控件的表单也会生成大的视图状态,因为我猜asp.net存储了关于每个服务器控件的各种元数据。但是可见性状态等等,都是在代码中控制的,所以我想我可以消除很多东西。

EnableViewState="false"添加到每个不需要它的控件(在页面中并在代码中创建)是相当繁琐的,所以我尝试在页面/控件级别禁用它,并有选择地为需要它的东西启用它。(是的,我知道这有风险,但实际上只有几个大的表单和几个模板,如果解决了,就会有很大的不同)。

这是我不太明白的地方。

如果一个控件或页面有EnableViewState="false"它的<%.. %>描述符,或者在父页面中创建它的标记中,一切都会中断,因为在代码中添加的任何ViewState数据都不起作用。因此,我似乎可以在控件级别上启用它,但是对于每个容器中的包装器控件,将EnableViewState设置为false,然后在每个控件级别上设置ViewStateMode=true

我不明白的是在下列情况下会发生什么:

包含其他控件的控件的ViewStateMode = ViewStateMode.EnabledEnableViewState = false

作为控件。内部控件还能在ViewStateMode中启用吗?基本上,当它们冲突时,哪种设置具有最终决定权?

对于每个容器,我希望能够禁用包装器控件中的所有内容,但仍然确保:

1) code 中的ViewState设置,以及

2)所有控件默认禁用ViewState ,以及

3) I可以有选择地为子控件启用ViewState。

这似乎令人困惑。如果我在母版页中有一个包装控件设置为EnableViewState="false",但随后又将一个子控件设置为ViewStateMode="Enabled",则它会中断。根据微软的说法,ViewStateMode应该取代任何外部ViewState设置,但它似乎不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-06 01:14:41

根据MSDN article on ViewStateModeViewStateMode只有在EnableViewState="true"时才有意义。要实现您想要的功能,您必须将ViewStateMode="Enabled"保留在控件上,然后将主控件的子控件包装在具有ViewStateMode="Disabled"asp:Placeholder中。这样,你仍然可以在代码背后操作ViewState,但没有子控件会有ViewState (除了那些你显式设置为通过ViewStateMode="Enabled"拥有它的控件)。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5485850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档