何时可以安全地禁用viewstate?对于哪些控件?在什么样的环境下?
在用户控件中,我已禁用viewstate,但如果我尝试单击此控件
<asp:LinkButton ID="LinkButton1" runat="server"
CommandName="Delete"
OnClientClick="return confirm('¿Está seguro que desea eliminar el mensaje?');"
EnableViewState="true">
<asp:Image ID="ImageButton1" runat="server" ImageUrl="~/Content/Images/delete.png"
ToolTip="Eliminar mensaje" /> Eliminar
</asp:LinkButton>
我收到System.InvalidOperationException异常。它位于ListView内。
答案 0 :(得分:8)
归结为您是否希望页面记住回发中的内容。如果要在每个回发上重新创建或分配值,则不需要查看状态
Here's一些好的指针
在控件上动态插入值(通过绑定或 以编程方式分配) - 这些控件的值不会 在重新渲染时保留,例如 从view1切换到view2。但是你 如果你,必须考虑两件事 认为重新填充价值观 每个渲染都要沉重地实现 然后不要禁用viewstate,如果 不是那么你可以禁用它 重新初始化渲染控件 事件。为什么我建议这个?它的 因为处理服务器端代码是 转移大的速度要快得多 垃圾数据回到服务器和 往返于客户。
在Datalist和DropDownList上 - 如果您没有使用OnSelectedIndex 更改事件然后您可以禁用 视图状态。
在Gridviews上 - 这是决定是否禁用的最难的部分 查看或保留它。如果你是 只是在它上面显示数据甚至是 使用它只是为了选择,然后 禁用视图状态。如果你是 使用分页,编辑或删除 功能则不然。 Gridview有 最大的viewstate容量所以你 应该明智地使用它。如果必须的话 更新多达5列然后为什么 不只是打开另一个视图然后设置 那里的值要更新 而不是在gridview上更新它 直接
答案 1 :(得分:3)
大多数控件的行为与您在禁用viewstate时的预期相同。如果没有视图状态,具有Gridviews等内置功能的“动态”控件往往不会很好。
您是否确定该异常与您在控件上将enableviewstate属性设置为true的视图状态相关?
答案 2 :(得分:0)
您可以随时禁用视图状态。如果需要,您必须找到其他方法来维护页面的状态。在途中是使用隐藏形式字段的老式方法。
只要您没有在viewstate中放置大型复杂对象,通常没有理由禁用它。
答案 3 :(得分:0)
如果您正在使用.net framework 2.0或更高版本的框架,那么您可以使用称为控制状态而不是视图状态的新功能。与viewstate相比,它在性能方面要快得多。
有关详细信息,请参阅以下网站...
http://www.pluralsight.com/community/blogs/fritz/archive/2004/07/01/472.aspx
http://msdn.microsoft.com/en-us/magazine/cc163901.aspx
http://www.codeproject.com/KB/user-controls/TestControlStateEx.aspx