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

问题描述 投票:0回答:2

用于从代码隐藏中触发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类显示引导程序弹出窗口(如上所述)。
  • 在这里,我将hidden-field变量的值设置为插入DB中的插入rowid(例如12345)。
  • ScriptManager类在DOM中成功注册脚本并显示弹出窗口。
  • 此后,我将Here hidden-field变量重置为-1。在弹出窗口中,我有一个按钮控件,可以重定向到另一个页面'WebPage1.APSX'。 $( '[ID * = hdnStudentId]')VAL( ' - 1')。
  • 现在用户点击“浏览器后退按钮”,它没有点击服务器端代码并​​根据服务器发送的前一页面实例呈现UI。
  • 由于这是服务器发送的上一个页面实例,隐藏字段变量设置为'12345'而不是-1(不确定原因,我们已经将值重置为-1)并再次显示弹出窗口。

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

javascript asp.net dom browser-cache back-button
2个回答
1
投票

您需要检查浏览器历史记录API,以便在没有服务器时保存您的页面状态,这里是mdn doc https://developer.mozilla.org/en-US/docs/Web/API/History_API

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

以及Ajax导航https://developer.mozilla.org/en-US/docs/Web/API/History_API/Example的一个例子。希望有所帮助!


0
投票

谢谢@Salus ...我听了你的建议..最后,以下代码片段为我工作..我使用'history.pushState();'显示弹出窗口后的方法:

$('#divStudentDetails').modal('show');
history.pushState(null, null, "");
© www.soinside.com 2019 - 2024. All rights reserved.