ASP.Net WebForm页面跳转后Alert弹窗不显示问题求助
解决ASP.NET WebForm跳转后弹窗不显示的问题
兄弟,你这问题我太熟了!根源在于代码逻辑顺序错了——你先执行了Response.Redirect,这玩意儿一跑,当前页面的请求直接就跳走了,后面注册脚本的代码根本没机会执行,自然弹窗就出不来。我给你俩靠谱的解决方案,按需选就行:
方案一:跳转传参,目标页面触发弹窗(推荐)
这个方法完全贴合你“跳转后弹窗”的需求:在跳转时给目标页面带个标记,等新页面加载完成后再弹alert。
第一步:修改按钮点击事件,传递标记参数
给跳转的URL拼接一个查询参数,用来告诉目标页面要弹窗:
void cmdCancel_Click(object sender, EventArgs e) { // 给目标URL添加弹窗标记参数 string targetUrl = Globals.NavigateURL(TabId) + "?showAlert=true"; HttpContext.Current.Response.Redirect(targetUrl, true); }
第二步:在目标页面的Page_Load里处理弹窗
打开你跳转到的那个页面,在Page_Load事件里检查这个参数,存在就注册弹窗脚本:
protected void Page_Load(object sender, EventArgs e) { // 非回发且存在弹窗标记时,注册弹窗脚本 if (!IsPostBack && Request.QueryString["showAlert"] == "true") { // 如果页面用了UpdatePanel,必须用ScriptManager注册 ScriptManager.RegisterStartupScript(this, this.GetType(), "welcomeAlert", "alert('Welcome to JackiesGame');", true); // 要是页面没用到UpdatePanel,用ClientScript也可以: // ClientScript.RegisterStartupScript(this.GetType(), "welcomeAlert", // "alert('Welcome to JackiesGame');", true); } }
方案二:先弹窗再跳转(临时应急用)
要是你想先弹弹窗,用户关闭后再跳转,就用这个方法——直接在当前页面注册一段先弹窗再跳转的脚本,别用Response.Redirect了:
void cmdCancel_Click(object sender, EventArgs e) { string targetUrl = Globals.NavigateURL(TabId); // 拼接弹窗+跳转的JS代码 string alertScript = $"alert('Welcome to JackiesGame'); window.location.href='{targetUrl}';"; // 注册到当前页面执行 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertAndRedirect", alertScript, true); }
额外注意点
- 要是页面里有
UpdatePanel,必须用ScriptManager.RegisterStartupScript,用ClientScript的话脚本可能不生效; - 注册脚本的第三个参数(比如这里的
welcomeAlert)要保证唯一,避免重复注册导致奇怪问题; - 方案一的参数如果涉及特殊字符,记得用
HttpUtility.UrlEncode处理,你这个场景暂时不用。
内容的提问来源于stack exchange,提问作者Chan Yoong Hon
相关产品推荐
相关产品推荐

