【问题标题】:persisting links on an asp.net page - is this a job for viewstate?在 asp.net 页面上保留链接 - 这是 viewstate 的工作吗?
【发布时间】:2010-12-29 15:06:06
【问题描述】:

我有一个母版页,上面有一个子导航链接部分:

<div id="sub_nav" runat="server"></div>

当我的主 asp:Menu 数据根据我所在页面的地址绑定时,我以编程方式使用超链接填充此内容。

这很好用,我所有正确的子菜单内容都会显示在每一页上。问题是,当其中一个页面进行回发时,我丢失了 sub_nav div 中的所有链接。

现在,无论母版页加载是否是回发,我都可以每次都用链接填充 div,但我认为有更好的方法来做到这一点。我在考虑启用 div 上的 viewstate 和其中的链接可能会通过回发保持它们,但显然这不是 viewstate 的工作方式。

这样做的正确方法是什么?

【问题讨论】:

    标签: asp.net viewstate asp.net-4.0


    【解决方案1】:

    Viewstate 只存储控件的当前状态,而不是控件本身。如果您要动态添加控件,请确保将它们添加到页面初始化方法中,而不考虑回发

    【讨论】:

      【解决方案2】:

      This MSDN 示例应该对您有所帮助。

      【讨论】:

        【解决方案3】:

        根据优秀文章TRULY Understanding ViewState,这并不是ViewState 的真正目的。此外,ViewState 会消耗额外的带宽,因此通常我们希望尽可能避免使用它。听起来这些数据应该“便宜”地获取(可缓存或诸如此类),所以我肯定会在每个请求上填充它并在这些控件上禁用 ViewState。


        要了解 ViewState 的主要用途,请考虑一个包含两个按钮 btnA 和 btnB 以及两个标签 lblA 和 lblB 的页面。

        当用户点击 btnA 时,页面回传并将 lblA 设置为“您点击了 A!”。
        当用户点击 btnB 时,页面回发并将 lblB 设置为“你点击了 B!”。

        使用 ViewState,页面会记住 lblA.Text 设置为“您点击了 A!”以前并恢复该值。如果没有 ViewState,如果用户单击 A 再单击 B,页面将只显示“您单击了 B!”因为没有任何东西可以存储 lblA 的先前值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多