何时可以安全地禁用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>
Run Code Online (Sandbox Code Playgroud)
我得到一个System.InvalidOperationException异常.它在ListView中.
它归结为您是否希望页面记住回发中的内容.如果要在每个回发上重新创建或分配值,则不需要viewstate
这里有一些很好的指示
动态插入控件上的值(通过绑定或以编程方式分配) - 此控件的值在重新呈现时不会保留,例如从view1切换到view2.但是你必须考虑两件事,如果你认为重新填充每个渲染的值很重,那么不要禁用viewstate,如果没有,那么你可以禁用它并重新初始化你对render事件的控件.为什么我建议这个?这是因为处理服务器端代码比将大量数据传输回服务器和往返客户端要快得多.
在Datalist和DropDownList上 - 如果您没有使用OnSelectedIndex Change事件,则可以禁用视图状态.
在Gridviews上 - 这是决定是禁用viewstate还是保留viewstate最困难的部分.如果您只是在其上显示数据或甚至仅用于选择,则禁用视图状态.如果您正在使用分页,编辑或删除功能,则不要.Gridview具有最大的视图状态容量,因此您应该明智地使用它.如果您必须更新多达5列,那么为什么不打开另一个视图,然后将值设置为更新,而不是直接在gridview上更新它.
在禁用视图状态的情况下,大多数控件的行为与您所期望的一样。具有内置功能(例如 Gridview)的“动态”控件在没有视图状态的情况下往往无法正常运行。
如果您已将控件上的enableviewstate 属性设置为 true,您确定该异常与视图状态相关吗?