我有一个母版页面上有一个用于子导航链接的部分:
<div id="sub_nav" runat="server"></div>
当我的主要asp:菜单数据根据我所在页面的地址进行绑定时,我以编程方式使用超链接填充此内容。
此工作正常,所有正确的子菜单都显示在每个页面上。问题是当其中一个页面进行回发时,我丢失了我的sub_nav div中的所有链接。
现在,我可以每次都使用链接填充div,无论主页加载是否是回发,但我认为有更好的方法。我正在考虑在div上启用viewstate,它内部的链接可能会通过回发持续存在,但显然这不是viewstate的工作方式。
这样做的正确方法是什么?
答案 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的先前值。