【问题标题】:Reload ASP.NET page from Page_Error event从 Page_Error 事件重新加载 ASP.NET 页面
【发布时间】:2014-04-16 19:20:44
【问题描述】:

我们的 ASP.NET 页面在 UpdatePanel 中使用了一堆 3rd 方控件。有时他们会抛出错误,除了Page_Error 事件之外的任何其他地方都无法捕获。发生这种情况时,我们需要刷新页面。有没有办法从错误事件中做到这一点?我们尝试将 JS 发送回客户端:

Protected Sub Page_Error(sender As Object, e As EventArgs) Handles Me.Error

    Dim ex = Server.GetLastError

    If ex.Message.Contains("Specific string from controls' error") Then 
        Server.ClearError()
        ScriptManager.RegisterStartupScript(Me, Me.GetType, "JSCode", "location.reload(true);", True)
    End If

End Sub

但这不起作用,会抛出自己的错误:

错误:Sys.WebForms.PageRequestManagerServerErrorException:未知 在服务器上处理请求时发生错误。状态 从服务器返回的代码是:500

我在事件查看器中找不到任何相关内容。

可以重新加载吗?

【问题讨论】:

  • 错误是什么?而且你的 if 语句还没有完成......
  • @the_lotus 在实际代码中if 中有一个条件,我只是将其保留为通用的。 MS Ajax 库引发的错误是通用的“500”我在事件查看器中看不到任何与之对应的内容。看起来在页面生命周期的这一点上 RegisterStartupScript 是不允许的(我会更新问题以使其更清楚)
  • 你可能会被困在做一个 Response.Redirect
  • @the_lotus 你能把它作为答案发布吗?我最初没有尝试过,因为普通的 Response.Redirect 在更新面板中不起作用。但它似乎在这种情况下工作得很好。

标签: asp.net vb.net


【解决方案1】:

你可能会被困在做一个 Response.Redirect 因为在 Page_Error 我不认为你可以提交 javascript。

【讨论】:

    【解决方案2】:

    正如您在评论中提到的,它是一个 ajax 错误。因此,此处不会呈现服务器响应。客户端浏览器期望响应是数据或部分视图/用户控件或类似块,而不是完整的 html 页面。但是,除了这个例外,响应作为一个完整的 html 页面返回(在这种情况下是一个错误页面)。结果,客户端无法正确处理该 ajax 响应。您必须在该处理程序中捕获该 ajax 错误事件并重定向/刷新。

    你可以看看我的帖子here

    【讨论】:

    • 感谢您的信息,看起来很有趣,但正如@the_lotus 指出的那样,普通的 Response.Redirect 也可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2013-07-31
    • 1970-01-01
    • 2011-08-14
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多