代码之家  ›  专栏  ›  技术社区  ›  Chris

UpdatePanel异常处理

  •  15
  • Chris  · 技术社区  · 16 年前

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

    如何才能优雅地处理更新面板中发生的错误,以提供无缝和无javascript错误的实现?

    3 回复  |  直到 8 年前
        1
  •  18
  •   Rob Windsor    16 年前

    在使用UpdatePanel时,可以使用脚本管理器(服务器端)上的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>
    
        2
  •  10
  •   Wagner Danda da Silva Filho    8 年前

    如果只想修复浏览器javascript错误并向用户显示异常消息,只需在表单声明之后的某个地方将其添加到母版页:

    <!-- 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.

        3
  •  0
  •   MattC    16 年前

    您是否可以重写页级错误方法,捕获异常并处理您认为合适的方式?

    protected override void OnError(EventArgs e)
    {
        //show error message here
    }