在asp.net页面上持久链接 - 这是viewstate的工作吗?

时间:2010-12-29 15:06:06

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

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

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

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

此工作正常,所有正确的子菜单都显示在每个页面上。问题是当其中一个页面进行回发时,我丢失了我的sub_nav div中的所有链接。

现在,我可以每次都使用链接填充div,无论主页加载是否是回发,但我认为有更好的方法。我正在考虑在div上启用viewstate,它内部的链接可能会通过回发持续存在,但显然这不是viewstate的工作方式。

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

3 个答案:

答案 0 :(得分:4)

Viewstate仅存储控件的当前状态,而不是控件本身。如果您是动态添加控件,请确保在页面init方法上添加它们而不管回发

答案 1 :(得分:2)

This MSDN示例可以为您提供帮助。

答案 2 :(得分:2)

根据优秀的文章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的先前值。