正常处理HttpRequestValidationException和ASP.net AJAX兼容?

时间:2008-09-06 21:54:08

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

ValidateEvents是一个很棒的ASP.net功能,但黄色死亡屏幕并不是那么好。我找到了一种如何优雅地处理HttpRequestValidationException的方法here,但这对ASP.net AJAX不起作用。

基本上,我有一个带有TextBox和Button的UpdatePanel,当用户在文本框中键入HTML时,会弹出一个带有错误消息的JavaScript弹出窗口,说明不修改响应。

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

3 个答案:

答案 0 :(得分:2)

找到它并blogged about it。基本上,EndRequestHandler和arts.set_error_Handler是你的朋友。

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

答案 1 :(得分:0)

嗯,好像你需要找一些JavaScript来检查html输入或客户端验证器。

答案 2 :(得分:0)

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

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

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