使用 ASP.NET UpdatePanel 控件返回上一页(保持视图状态)
ASP.NET 4.0 Webform网站
母版页: 左侧面板(导航菜单用途):使用UpdatePanel控件(AJAX),因此当选择新菜单时,整个页面不会重新加载。仅更新内容部分。
我的问题是——我希望能够使用浏览器后退按钮返回到上一个菜单(保存表单状态)。然而,当查看视图状态时,它总是相同的。有什么办法可以做到这一点吗?谢谢。
ASP.NET 4.0 Webform website
master page:
left side panel (navigation menu purpose): use UpdatePanel control (AJAX), so when selecting new menu, the whole page won't reload. Only content part will be updated.
My question is -- I want to be able to use browser back button to go back to previous menu (with form state saved). However, when looking into the viewstate, it's always the same. Is there any way to do this? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想一种解决方法是,当用户从菜单中选择菜单项时,将该选择放入会话变量和页面加载中。然后,当用户点击浏览器后退按钮时,您可以在页面加载中设置菜单,因为您的会话变量中有值。
I guess one work around would be, when a user selects a menu item from the menu, put that selection in a session variable and in the page load. Then when the user hits the browser back button, you can set the menu in the page load, since you have values in your session variable.
pst指的是“跨页发帖”。
在源页面上,您需要将 asp 按钮的 postbackurl 设置为目标页面 url。
在目标页面 c# onload 方法中,将 page.previouspage 设置为源页面。检查上一页的帖子是否是跨页面帖子。
如果为 true,则获取 zource 页面的视图状态。
如何从目标页面访问源页面的视图状态?在转到目标页面之前,将源页面的视图状态保存在源页面中。将视图状态保存在源页面上的 asp 隐藏变量中,然后使用 previouspage.findcontrol("variable name") 将其获取到目标页面中。
获取源页面的视图状态后,将其保存在目标页面上的 asp 隐藏变量中。
当您想返回源页面时,您将以某种方式反向执行上述操作。
“返回上一页”链接按钮将使用源页面 url 作为 postbackurl 值。
在源页面的 onload c# 方法中,将 page.previouspage url 设置为目标页面的 url。检查上一页的帖子是否是跨页帖子。
如果为 true,则在源页面中(从目标页面返回后)使用 previouspage.findcontrol("savedSourcePageViewstate") 获取源页面的已保存视图状态。
我还不确定如何将源页面的视图状态更改为保存的视图状态。您实际上可能必须在目标页面的 backttoppreviouspage 按钮的点击处理程序中执行此操作。
我现在正在工作中开发的一个项目中开发这个流程。
当我让它工作时,我将为此创建一个完整的演练,其中包含代码示例,并在此处发布演练的链接。
但是,我已经完成了从目标页面中的源页面获取数据的跨页面发布过程。
它是安全的,并且是我遇到的在 ASP.NET WebForms 应用程序中从一个页面到另一个页面获取数据的最佳方法。
What pst is referring to is "cross-page posting".
On your source page, you will need to set the asp button's postbackurl to your target page url.
In the target page c# onload method, set page.previouspage to your source page. Check if the previouspage's post was a crosspagepost.
If true, get zource page's viewstate.
How do you get access to the source page's viewstate from the target page? Save the source page's viewstate in the source page before going to the target page. Save the viewstate in an asp hidden variable on the source page, then get it in the target page using previouspage.findcontrol("variable name").
After getting the source page's viewstate, save it in an asp hidden variable on the target page.
When you want to return to the source page, you will do everything above in reverse, in a way.
The "back to previous page" link button will use the source page url for the postbackurl value.
In the source page's onload c# method, set the page.previouspage url to the target page's url. Check if the previouspage's post was a cross-page post.
If true, in the source page (after returning from target page) use previouspage.findcontrol("savedSourcePageViewstate") to get the saved viewstate of the source page.
I am not exactly sure yet how to then change the source page's viewstate to the saved viewstate. you might actually have to do it in the target page's backttopreviouspage button's click handler.
I am working at developing this process right now in a project i'm developing at work.
When i get it working, i'll create a full walkthrough for this, with code examples, and post the link to the walkthrough here.
However, i already haveworking the cross-page posting process of getting data from the source page in the target page.
It is secure, and is the best method that i have come across for getting data from one page to anotherin an asp.net webforms application.