UpdatePanel 异常处理

Posted

技术标签:

【中文标题】UpdatePanel 异常处理【英文标题】:UpdatePanel Exception Handling 【发布时间】:2010-12-22 00:17:29 【问题描述】:

在我正在构建的 ASP.NET Web 应用程序中实现的 UpdatePanel 中出现异常时,它们会导致页面上出现 javascript 错误,并在警报中提供一些高级错误输出。这对于开发来说是可以的,但是一旦系统投入生产,由于多种原因显然没有好处。我可以用 Try Catch 等围绕麻烦的活动来控制 Javascript 错误,但在某些情况下,我想在主页等上采取行动来支持用户体验。

如何优雅地处理 UpdatePanels 中发生的错误以提供无缝且无 Javascript 错误的实现?

【问题讨论】:

【参考方案1】:

如果您只想修复浏览器 javascript 错误并向用户显示异常消息,您只需将其添加到您的 Masterpage 中的表单声明后的某个位置:

<!-- This script must be placed after the form declaration -->
<script type="text/javascript">
    Sys.Application.add_load(AppLoad);

    function AppLoad() 
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
    

    function EndRequest(sender, args) 
        // Check to see if there's an error on this request.
        if (args.get_error() != undefined) 

            var msg = args.get_error().message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", "");

            // Show the custom error. 
            // Here you can be creative and do whatever you want
            // with the exception (i.e. call a modalpopup and show 
            // a nicer error window). I will simply use 'alert'
            alert(msg);

            // Let the framework know that the error is handled, 
            //  so it doesn't throw the JavaScript alert.
            args.set_errorHandled(true);
        
    
</script>

您不需要捕获 OnAsyncPostBackError,即使您想要自定义消息也是如此。 Go to my blog post if you want more information about this.

【讨论】:

成功了!非常感谢!【参考方案2】:

在使用 UpdatePanel 时,您可以结合使用 ScriptManager(服务器端)上的 AsyncPostBackError 事件和 PageRequestManager(客户端)上的 EndRequest 事件来完全处理服务器端错误。

这里有一些资源可以帮助你:

Customizing Error Handling for ASP.NET UpdatePanel Controls

Error Handling Customization for ASP.NET UpdatePanel

这是一个简单的例子:

// Server-side
protected void ScriptManager1_AsyncPostBackError(object sender, 
    AsyncPostBackErrorEventArgs e)  
    ScriptManager1.AsyncPostBackErrorMessage =
        "An error occurred during the request: " +
        e.Exception.Message; 



// Client-side
<script type="text/javascript">
  function pageLoad()  
    Sys.WebForms.PageRequestManager.getInstance().
        add_endRequest(onEndRequest);  
  

  function onEndRequest(sender, args)  
    var lbl = document.getElementById("Label1");
    lbl.innerhtml = args.get_error().message;
    args.set_errorHandled(true);
  
</script>

【讨论】:

感谢您,非常感谢。 在我修复了另一个相关问题后效果很好:***.com/questions/1671881/…【参考方案3】:

您能否覆盖页面级错误方法,捕获异常并处理您认为合适的方式。

protected override void OnError(EventArgs e)

    //show error message here

【讨论】:

以上是关于UpdatePanel 异常处理的主要内容,如果未能解决你的问题,请参考以下文章

springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如

java异常处理详解!!

Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )

异常处理,约束,MD5加密,日志处理

PHP异常处理