通过asp.net 4.0中的“EnableViewState”和“ViewStateMode”使视野状态最小化
|
我正在尝试清理一个早期的ASP.NET WebForms站点,其中启用了ViewState。这是一个性能问题 – 巨大的视野导致明显的提交延迟。但是大多数的表单似乎并不需要ViewState,除了一些复杂的控件&表单数据。即使没有输入控件的窗体也会产生大的viewstates,因为我猜asp.net正在存储有关每个单一服务器控件的各种元数据。但是,可见性状态等都是在代码中控制的,所以我想我可以消除很多。 将EnableViewState =“false”添加到不需要它的每个控件(在页面中并以代码创建)非常繁琐,所以我试图在页面/控件级别禁用它,并且选择性地启用它需要的东西(是的,我意识到这是有风险的,但真正只有几个大的形式和几个模板,如果被解决将会有很大的不同)。 这是我没有得到的。 如果控件或页面的EnableViewState =“false”,它的<%..%>描述符,或在其父页面中创建的标记中,所有内容都会中断,因为在代码中添加的任何ViewState数据都不起作用。所以我似乎能够在控制级别启用它,但是将EnableViewState设置为false,以便在每个容器中进行包装器控件,然后在每个控件级别设置ViewStateMode = true(其中包含该值)。 当我没有得到的时候会发生什么: ViewStateMode = ViewStateMode.Enabled和 用于控制。内部控件是否可以使用ViewStateMode启用?基本上,哪个环节在冲突时有最后一个字? 对于每个容器,我希望能够禁用包装器控件中的所有内容,但仍然可以确保: 1)代码工作中的ViewState设置,和 2)默认情况下,所有控件的ViewState都被禁用 3)我可以选择启用ViewState进行子控制。 这似乎是混乱的。如果我在主页面中设置了一个设置为EnableViewState =“false”的包装器控件,但是将子控件设置为ViewStateMode =“Enabled”,则它将中断。根据MS,ViewStateMode应该取代任何外部的ViewState设置,但它似乎不起作用。 解决方法根据 MSDN article on ViewStateMode,ViewStateMode仅在EnableViewState =“true”时有意义。要实现你想要的,你必须在控件上离开ViewStateMode =“Enabled”,然后将主要的子控件包装在具有ViewStateMode =“Disabled”的asp:占位符中。这样,您仍然可以在代码隐藏中操作ViewState,但是没有子控件将具有ViewState(除了您通过ViewStateMode =“Enabled”显式设置)。(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何将应用程序用户放在与其余对象相同的上
- asp.net-mvc-3 – 具有ASP.NET MVC3和嵌入式Razor视图的插件
- ASP.NET用户控件列表/集合/数组属性
- asp.net-mvc – 部署的ASP.NET MVC 4项目不会运行
- asp.net-mvc – ASP.net MVC DropDownList预选项目被忽略
- asp.net 4.0:是否有相当于ClientIDMode的INPUT的名称?
- asp.net-mvc-3 – Mini Profiler不渲染脚本
- ASP.NET vNext Core CLR缺少type.IsPrimitive
- asp.net-mvc – ASP.NET MVC 2 – Html.DropDownList与View
- asp.net-core – 在ASP.NET MVC Core中仍然存在ViewModel概
