弹出窗口上的 Response.redirect 转到主页

发布于 2024-07-22 15:03:56 字数 258 浏览 4 评论 0原文

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

一个 Asp 页面发出错误消息。

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

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

I have a pop up page that opens when I select a link on the parent window. If some exception occurs in page loaded handler of the pop up, then the error should go to parent window, not the pop up page. If an exception does not occur in the pop up page, it will load the pop up only with the contents.

An error message is coming from one Asp page.

The code in the catch block of popup page:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

猫瑾少女 2024-07-29 15:03:56

如果您正在处理 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() 函数可以以您喜欢的任何方式显示错误。

If you are handling the error in the catch block, what you can do - declare a javascript variable and set the error text in that variable.

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

If error occurs, you do this in the catch block -

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

What the above code will do - set the error description, and call the CloseWindow() function on your aspx page. The function will contain the following lines of code -

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

This function will call the parent window's function and close itself. The SetError() function can display the error in whatever fashion you like.

忆伤 2024-07-29 15:03:56

您不能使用 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();
}

You can't use Response.Redirect to decide where the page will be loaded. That is decided before the request is sent to the server, so when the server code starts to run it's already too late to change where the page will go.

If you want to close the popup and load a page in the parent window instead, you have to write Javascript code to the popup that does that.

Example:

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();
}
給妳壹絲溫柔 2024-07-29 15:03:56

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

I think it would be a better user experience to use a javascript popup and do the request via AJAX rather than use a new window and a full page request cycle. Doing it in javascript gives you the ability to keep all the interaction on the same page and would make it trivial to get your error message in the "main" interface. Among many other ways to do this you could use jQuery to provide both the AJAX interface and the dialog plugin to manage the modal dialog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文