【问题标题】:Handling HttpRequestValidationException gracefully and ASP.net AJAX compatible?优雅地处理 HttpRequestValidationException 并兼容 ASP.net AJAX?
【发布时间】:2008-09-06 21:54:07
【问题描述】:

ValidateEvents 是一个很棒的 ASP.net 功能,但黄屏死机不是很好。我找到了一种如何优雅地处理 HttpRequestValidationException here 的方法,但这不适用于 ASP.net AJAX。

基本上,我得到一个带有 TextBox 和 Button 的 UpdatePanel,当用户在 Textbox 中键入 HTML 时,会弹出一个 JavaScript 弹出窗口,其中包含一条错误消息,说不要修改响应。

所以我想知道优雅地处理 HttpRequestValidationException 的最佳方法是什么?对于“正常”请求,我只想显示一条错误消息,但是当它是 AJAX 请求时,我想丢弃该请求并返回一些指示错误的内容,以便我的前端页面可以对其做出反应?

【问题讨论】:

    标签: asp.net validation asp.net-ajax


    【解决方案1】:

    找到它并blogged about it。基本上,EndRequestHandler 和 args.set_errorHandled 是我们这里的朋友。

    <script type="text/javascript" language="javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(EndRequestHandler);
    
    function EndRequestHandler(sender, args) {
        if (args.get_error() != undefined)
        {
            var errorMessage;
            if (args.get_response().get_statusCode() == '200')
            {
                errorMessage = args.get_error().message;
            }
            else
            {
                // Error occurred somewhere other than the server page.
                errorMessage = 'An unspecified error occurred. ';
            }
            args.set_errorHandled(true);
            $get('<%= this.newsletterLabel.ClientID %>').innerHTML = errorMessage;
        }
    }
    </script>
    

    【讨论】:

      【解决方案2】:

      如果可能的话,我想避免这种情况,但这似乎比预期的要复杂得多。

      通常,每个人都建议使用 ScriptManager 的 AsyncPostBackError,但如果在 Global.asax 上调用,这将不起作用。不幸的是,由于 HttpRequestValidationException 是由运行时发出的,它永远不会进入我的代码,而且我在 Application_Error 中无法做很多事情。

      所以是的,它确实需要在 JavaScript 中完成,我只是希望有一种方法可以添加像 BeginRequestHandler-Function 这样的“钩子”,这样我就不必“破解”微软代码。如果我比其他人先找到解决方案,我会把它放在这里:-)

      【讨论】:

        【解决方案3】:

        hmmmm,您似乎需要找到某种 JavaScript 来检查 html 输入或客户端验证器。

        【讨论】:

          猜你喜欢
          • 2011-08-08
          • 1970-01-01
          • 1970-01-01
          • 2010-10-10
          • 1970-01-01
          • 2017-12-31
          • 2011-11-26
          • 2012-07-09
          • 1970-01-01
          相关资源
          最近更新 更多