【问题标题】:When is safe to disable viewstate?什么时候禁用视图状态是安全的?
【发布时间】:2010-10-26 01:57:27
【问题描述】:

什么时候可以安全地禁用视图状态?针对哪些控件?什么情况下?

在用户控件中我禁用了视图状态,但如果我尝试在此控件中单击

<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 内。

【问题讨论】:

    标签: asp.net viewstate


    【解决方案1】:

    归结为您是否希望页面在回发中记住内容。如果您不需要在每个回发视图状态上重新创建或分配值

    Here's一些好的指点

    在控件上动态插入值(通过绑定或 以编程方式分配)– 此控件的值不会 重新渲染时保留,例如 从 view1 切换到 view2。但是你 必须考虑两件事,如果你 考虑重新填充值 每个渲染都很难实现 然后不要禁用视图状态,如果 不是那么你可以禁用它并且 重新初始化渲染控件 事件。我为什么建议这个?它的 因为处理服务器端代码是 比传输大数据快得多 垃圾数据返回服务器和 给客户往返。

    On Datalist 和 DropDownList – 如果您不使用 OnSelectedIndex 更改事件,然后您可以禁用 视图状态。

    在 Gridviews 上——这是决定是否禁用的最难的部分 viewstate 或保留它。如果你是 只是在上面显示数据,甚至 仅用于选择,然后 禁用视图状态。如果你是 使用分页、编辑或删除 功能然后不要。网格视图有 最大的 viewstate 容量,所以你 应该明智地使用它。如果你必须 更新多达 5 列然后为什么 不只是打开另一个视图然后设置 那里的值要更新,而不是 而不是在gridview上更新它 直接。

    【讨论】:

      【解决方案2】:

      大多数控件的行为与您在禁用视图状态时所期望的一样。具有像 Gridviews 这样的内置功能的更“动态”控件在没有视图状态的情况下往往无法正常运行。

      鉴于您的控件的 enableviewstate 属性设置为 true,您确定异常与视图状态有关吗?

      【讨论】:

      • 好吧,例外是因为我没有设置 DataKeyNames 属性。但这个问题同样有效,不是吗?
      【解决方案3】:

      您始终可以禁用视图状态。如果需要,您必须找到其他方法来维护页面的状态。方法是使用隐藏表单字段的老式方法。

      只要您不将大型复杂对象放入视图状态,通常就没有理由禁用它。

      【讨论】:

        【解决方案4】:

        如果您使用的是 .net framework 2.0 或更高版本的框架,那么您可以使用称为控制状态的新功能而不是视图状态。与视图状态相比,它在性能方面要快得多。

        更多详情请查看以下网站...

        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

        【讨论】:

          猜你喜欢
          • 2013-01-20
          • 2015-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-08
          • 1970-01-01
          相关资源
          最近更新 更多