Browser back按钮显示服务器发送的保留页面状态,但使用javascript完成的任何DOM修改都不会被保留

Browser back按钮显示服务器发送的保留页面状态,但使用javascript完成的任何DOM修改都不会被保留,javascript,asp.net,dom,browser-cache,back-button,Javascript,Asp.net,Dom,Browser Cache,Back Button,用于从代码隐藏触发JavaScript代码的C代码段如下所示: int returnValue = SaveStudent("John", "XII"); // SaveStudent() is a C# function that saves the student details in DB and returns studentId. hdnStudentId = returnValue ; // hdnStudentId is a hidden-field control ScriptM

用于从代码隐藏触发JavaScript代码的C代码段如下所示:

int returnValue = SaveStudent("John", "XII"); // SaveStudent() is a C# function that saves the student details in DB and returns studentId.
hdnStudentId = returnValue ; // hdnStudentId is a hidden-field control
ScriptManager.RegisterStartupScript(this, this.GetType(), 
                          "ShowStudent", "showStudentDetails();",true);
showStudentDetails JavaScript方法的定义如下:

function showStudentDetails(){
     If($('[id*=hdnStudentId]').val() > 0){
         // show the popup
     }
}
以下是对问题的描述:

在网页“WebPage1.APSX”中,将数据保存在DB中后,我显示 如上所述,使用ScriptManager类的引导弹出窗口

这里,我将隐藏字段变量的值设置为插入的rowid 插入到DBsay 12345中的

ScriptManager类 在DOM中成功注册脚本并显示弹出窗口

此后,我将此处隐藏的字段变量重置为-1。在 弹出窗口,我有一个按钮控件,重定向到另一个页面 “WebPage1.APSX”

$'[id*=hdnStudentId]'.val'-1'

现在用户点击“浏览器后退按钮”,它不会点击服务器端代码和 根据服务器发送的页面的上一个实例呈现UI

由于这是服务器发送的页面的上一个实例,所以隐藏字段 变量被设置为“12345”而不是-1不知道为什么,我们已经 是否将值重置为-1并再次显示弹出窗口


要求:当用户单击“浏览器后退按钮”时,我们需要记住DOM中以前处理过的数据,即$”[id*=hdnStudentId]'.val'-1';因此,我们可以避免在浏览器上单击“后退”按钮时显示弹出窗口。

您需要签出浏览器历史API,以便在没有涉及服务器的情况下将页面状态保存在历史记录中,这是mdn文档

DOM窗口对象通过以下方式提供对浏览器历史记录的访问: 历史对象。它公开了有用的方法和属性,使 您可以在用户的历史记录中来回移动,以及- 从HTML5开始-操作历史堆栈的内容


也是Ajax导航的一个示例。希望有帮助

谢谢@Salus。。我听从了你的劝告。。最后,下面的代码片段对我起了作用。。 我用了“历史,国家”方法在显示弹出窗口之后:

$('#divStudentDetails').modal('show');
history.pushState(null, null, "");

大家好,请回复。我会感谢你的!谢谢。这确实是一个好主意,但在10.aspx页面周围的多个网页中实现它时,我面临的问题很少。所以,我试着把它保存在主页上。但在获取上一页时遇到了问题。问题:单击页面链接时,上一页是“之前存在”页面,但在页面刷新时,它也会加载上一页。此外,浏览器上显示的URL也会错误更改。母版页的代码段被放置在下一个注释中,因为“此回复的字符数太长”。下面是母版页的代码段:这些代码被注释掉,因为它们没有按预期工作://history.pushStatenull,null,document.referer;window.addEventListener'popstate',函数事件{//history.pushStatenull,null,document.referer;//history.pushStatenull,null,window.location.href;警报'Hi,您单击了浏览器后退按钮';};您是否考虑过这可能是由于向pushState传递动态引用造成的?我不建议传递document.referer或window.location.href等动态参数。我想最好这样做,var stateObj={id:hdnStudentId};history.pushStateObj,空,弹出;after URL是客户端URL的通用模式,仅由JS处理。然后在事件侦听器中,您可以调用函数showStudentDetailsstateObj.id,这意味着扩展您的函数以接受参数。您的JavaScript需要保存所需的数据,以便通过以下方式将DOM渲染回已知状态。保存推送状态并将popState数据检索到历史对象。这里没有魔法!谢谢@Salus。。我听从了你的劝告。。最后,下面的代码片段对我起了作用。。我用了“历史,国家”方法显示弹出窗口:$'divStudentDetails'。模式为'show';history.pushStatenull,null;