ValidateEvents 是一个很棒的 ASP.net 函数,但黄屏死机不太好。我找到了一种如何优雅地处理 HttpRequestValidationException 的方法 这里, ,但这不能正确地与 ASP.net AJAX 一起使用。

基本上,我得到了一个带有文本框和按钮的 UpdatePanel,当用户在文本框中输入 HTML 时,会弹出一个 JavaScript 弹出窗口,其中包含一条错误消息,提示不要修改响应。

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

有帮助吗?

解决方案

找到了它并且 在博客上谈论了它. 。基本上,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>

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top