在Response.Redirect后使用Javascript alert()

3
我在代码后端调用了这个函数:
(test.aspx)
Response.Redirect("~/Default.aspx");

我想在重定向到Default.aspx之前/之后包含一个JavaScript警示框,这是可能的吗? 我这样做是因为我正在将一个值传递给另一个页面(test.aspx),该页面检查数据库,如果读者HasRow(),则重定向到Default.aspx。

3个回答

5
要实现这一点,需要使用JavaScript显示警报,然后再使用JavaScript重定向页面:
ScriptManager.RegisterStartupScript(this,this.GetType(),"Redit","alert('asdf'); window.location='" + Request.ApplicationPath + "Default.aspx';",true);

抱歉,我忘记在分配window.location时放置撇号',请查看答案中的更改。 - TBohnen.jnr
应该可以,我刚在我的电脑上测试过了,它是正常工作的。请问您能否把您的代码粘贴过来看看为什么它不能正常工作呢? - TBohnen.jnr
使用(SqlDataReader dr = cmd.ExecuteReader()) { if (dr.HasRows) { while (dr.Read()) { buList.Add(dr[0].ToString()); } } else { // Response.Redirect("~/Default.aspx"); ScriptManager.RegisterStartupScript(this, this.GetType(), "Redit", "alert('asdf'); window.location='" + Request.ApplicationPath + "Default.aspx';", true); } } - Pod Mays
你确定它正在执行那一行吗?另外,你的浏览器启用了JavaScript吗? - TBohnen.jnr
我也在我的端上测试了你的代码,它应该可以工作,请确保它实际上执行了这一行,即你的dr没有返回任何行,以便它会跳到else语句。 - TBohnen.jnr

4
让我们来看一下当你调用response.redirect()时会发生什么。
  1. 服务器向浏览器发送HTTP响应302,其中包含要导航到的URL。
  2. 浏览器不显示响应的内容,而是从指定的URL获取内容。
  3. 如果对新URL的请求成功,则显示它。
现在看起来,我们可以推断出,从发出重定向的页面调用alert()是不可能的,因为它的内容(如果有)将被丢弃。
从你重定向到的页面上完成你想要的操作是可能的。为此,只需检查Request.UrlReferrer以检查是否从正确的页面进行了重定向,然后在适当的时候显示警报。
例如:
  1. Page1重定向到page2
  2. Page2检查Request.UrlReferrer是否等于Page1
  3. 如果相等,则显示警报
  4. 如果不相等,则不需要特殊处理
另一种方法是先使用JavaScript显示警报,然后再进行重定向。window.location.href = newurl。

谢谢你提供的信息,伙计。我怎样从代码后台调用JavaScript? - Pod Mays
@Pod 你可以使用 Page.RegisterStartupScript()。它接受两个字符串参数。第一个是唯一标识符,第二个是你的脚本。 - Mel

0
如果您在Default.aspx页面上显示某些消息,则必须进行声明。因为当您使用重定向时,页面会从顶部开始呈现。您必须在重定向之前设置Sesion状态为某个标志,并在Default.aspx页面上插入该部分,该部分在设置此Sesion状态时添加。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接