我正在为门户框架做一些头脑风暴,我正在设想一个通过ViewState跟踪的面包屑导航堆栈(这样如果用户在浏览器中点击“返回”并点击其他链接,那么面包屑小道将离开右页)。我的页面实际上只是ascx控件,它们根据URL加载到主门户页面上的占位符控件中。当用户单击门户链接时,会有一个回发加载原始页面并调用给定链接的“单击”处理程序,然后应该将当前位置“推送”到痕迹堆栈上,然后再向浏览器发送重定向指令以更改我要访问的页面的URL。
就目前我的头脑风暴而言,这是因为一旦我们执行重定向,我们就会失去ViewState。我没有考虑重定向,而是简单地告诉我的主门户页面用目标页面控件替换当前的页面控件,从而避免额外的http往返并允许我保留ViewState。但是,我的整个网站体验都发生在单个URL的上下文中,因此我丢失了URL书签等。如果我将一些控件包装在AJAX面板中,就浏览器的历史记录而言,整个网站会在一个页面请求中发生。
我想要的是某种方式让浏览历史记录和URL表现得好像每条链接都引导他们到一个带有描述性URL的新页面,但仍然有一些方法可以知道用户所采用的路径到达他们所在的页面(ViewState似乎是最简单的跟踪方式)。
有人可以提出一些我可能会尝试使用的技巧吗?
答案 0 :(得分:0)
第一个建议......你可能想看一下ASP.NET MVC。但是,我不得不承认这里有些无知,因为我不确定这是否真的可以解决你的问题。但它听起来就像MVC适合的那样。
第二......可以覆盖负责保存和加载ViewState的方法。例如,您可以做的一件事就是将ViewState推送到Session中,而不是将其发送给用户并备份回发。您可以在此处轻松添加一些自定义代码。
第三......我想你可能想重新考虑你的部分设计。 ViewState实际上有一个目的:它重新创建页面的状态,就像为用户呈现页面时一样。如果要移动到其他页面或一组新控件,为什么还需要ViewState? ViewState本身实际上只是一个黑客攻击...... ASP.NET在无状态系统上维护状态的方式。 (但这是一个完整的'其他讨论)我们有其他维护状态的方法......主要机制是Session对象。为什么不在那里保存您的breaacrumb数据?
答案 1 :(得分:0)
我会考虑使用cookies。出于性能原因,如果可以,您确实希望避免HTTP重定向,并且ViewState仅在用户提交表单时才有效,而不是常规链接。
您可能会在Cookie中维护多个路径列表,这些路径列表显示用户从一个页面转到另一个页面的路径。也许您为每个页面设置一个唯一ID,当用户点击链接时,某些JavaScript将其作为查询字符串应用,并且服务器使用该ID和Cookie中的过去历史记录来确定如何渲染面包屑。下一页?