0

如果 ASP.NET 中存在值,我有一些 JavaScript 会显示通知Session。这可能不是我现在正在学习的最佳解决方案,但这里是代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Session["Alert"] != null)
        {
            Page.ClientScript.RegisterStartupScript(GetType(), "alert", Session["Alert"].ToString());
            Session["Alert"] = null;
        }
    }
}

Session["Alert"]具有显示通知的 JS 功能:

Session["Alert"] = "showAlert('test')";

function showAlert(msg) {
    alert(msg);
}

如果已为其分配了值,则代码将成功运行并显示通知。单击浏览器的后退按钮,然后单击前进按钮会再次显示警报,因为页面没有经历其生命周期。

如何防止警报多次显示?我尝试添加一个全局 JavaScript 变量,例如var alertShown = false;并在函数中检查它,showAlert但这不起作用。

有没有一种跨浏览器的方法可以解决这个问题?

4

1 回答 1

0

好吧,对于初学者来说,您必须避免使用客户端的导航缓存(通常后退/前进实际上不会将页面拉回)。

在那个障碍之后,您可以查看(具有讽刺意味的是)使用会话变量来存储它是否已被查看 [输出],并且只将其转储到页面一次。

如果这看起来很多,您可以在函数中添加一个 cookie 检查,这样当它运行(并重新运行)时,它会检查 cookie,如果不存在,则会发出警报并设置 cookie。伪代码:

function showAlert(msg){
  if (cookie[msg] == null){ // a cookie doesn't exist for this msg
    alert(msg); // alert the msg
    cookie[msg] = true; // set the cookie so the next pass is ignored
  }
}
于 2013-07-30T21:09:19.400 回答