何时可以安全地禁用viewstate?

时间:2009-05-14 04:21:06

标签: asp.net viewstate

何时可以安全地禁用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内。

4 个答案:

答案 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