2

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

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

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

4

3 回答 3

2

找到它并写了博客。基本上,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>
于 2008-09-08T20:59:39.797 回答
1

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

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

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

于 2008-09-08T20:26:11.700 回答
0

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

于 2008-09-07T22:04:31.410 回答