当我在父窗口上选择一个链接时,我会打开一个弹出页面。如果弹出的页面加载处理程序发生异常,则错误应该转到父窗口,而不是弹出页面。如果弹出页面中没有发生异常,它将仅加载弹出页面的内容。
一条错误消息来自一个 Asp 页面。
弹出页面的catch块中的代码:
catch(Exception ex)
{
Response.Redirect("");
Response.End();
}
当我在父窗口上选择一个链接时,我会打开一个弹出页面。如果弹出的页面加载处理程序发生异常,则错误应该转到父窗口,而不是弹出页面。如果弹出页面中没有发生异常,它将仅加载弹出页面的内容。
一条错误消息来自一个 Asp 页面。
弹出页面的catch块中的代码:
catch(Exception ex)
{
Response.Redirect("");
Response.End();
}
您不能使用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();
}
如果您正在处理 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);
}
上面的代码将做什么 - 设置错误描述,并CloseWindow()
在您的 aspx 页面上调用该函数。该函数将包含以下代码行 -
function CloseWindow() {
window.parent.window.SetError(errorDescription);
self.close();
}
该函数将调用父窗口的函数并自行关闭。该SetError()
函数可以以您喜欢的任何方式显示错误。