Popup上的Response.redirect转到主页面

时间:2009-05-29 10:31:58

标签: c# asp.net modalpopups

当我在父窗口上选择链接时,会打开一个弹出页面。如果在弹出的页面加载处理程序中发生某些异常,则错误应该转到父窗口,而不是弹出页面。如果弹出页面中没有发生异常,它将仅加载弹出内容。

错误消息来自一个Asp页面。

弹出页面的catch块中的代码:

catch(Exception ex)
{
    Response.Redirect("");
    Response.End();
}

3 个答案:

答案 0 :(得分:0)

您无法使用Response.Redirect来确定页面的加载位置。这是在将请求发送到服务器之前决定的,因此当服务器代码开始运行时,更改页面的位置已经太晚了。

如果要关闭弹出窗口并在父窗口中加载页面,则必须将Javascript代码写入执行该操作的弹出窗口。

示例:

catch (Exception ex) {
   Response.Write(
      "<html><head><title></title></head><body>" +
      "<script>" +
      "window.opener.location.href='/ErrorPage.aspx?message=" + Server.UrlEncode(ex.Message) + "';" +
      "window.close();" +
      "</script>" +
      "</body></html>"
   );
   Response.End();
}

答案 1 :(得分:0)

如果你正在处理catch块中的错误,你可以做什么 - 声明一个javascript变量并在该变量中设置错误文本。

var errorDescription = ""; //Will hold the error description (in .aspx page).

如果发生错误,请在catch块 -

中执行此操作
try
{
    //Code with error
}
catch(Exception ex)
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "ErrorVariable", string.Format("errorDescription = '{0}'; CloseWindow();", ex.Message), true);
}

上面的代码将做什么 - 设置错误描述,并在aspx页面上调用CloseWindow()函数。该函数将包含以下代码行 -

function CloseWindow() {
    window.parent.window.SetError(errorDescription);
    self.close();
}

此函数将调用父窗口的函数并关闭自身。 SetError()函数可以以您喜欢的任何方式显示错误。

答案 2 :(得分:0)

我认为使用javascript弹出窗口并通过AJAX执行请求而不是使用新窗口和整页请求周期将是更好的用户体验。在javascript中执行此操作后,您可以将所有交互保留在同一页面上,并且可以轻松地在“主”界面中获取错误消息。在许多其他方法中,您可以使用jQuery提供AJAX接口和dialog插件来管理模式对话框。