ValidateEvents是一个很棒的ASP.net功能,但黄色死亡屏幕并不是那么好。我找到了一种如何优雅地处理HttpRequestValidationException的方法here,但这对ASP.net AJAX不起作用。
基本上,我有一个带有TextBox和Button的UpdatePanel,当用户在文本框中键入HTML时,会弹出一个带有错误消息的JavaScript弹出窗口,说明不修改响应。
所以我想知道优雅地处理HttpRequestValidationException的最佳方法是什么?对于“正常”请求,我想只显示一条错误消息,但是当它是一个AJAX请求时,我想抛弃请求并返回一些指示错误的东西,以便我的前端页面可以对它作出反应?
答案 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)
答案 2 :(得分:0)
如果可能的话,这就是我想避免的,但这似乎比预期的要复杂得多。
通常,每个人都建议使用ScriptManager的AsyncPostBackError,但是如果在Global.asax上调用则这不起作用。不幸的是,由于HttpRequestValidationException是由运行时发出的,它永远不会输入我的代码,而且我在Application_Error中也做不了多少。
所以是的,它确实需要在JavaScript中完成,我只是希望有一种方法来添加像BeginRequestHandler-Function这样的“钩子”,这样我就不必“破解”Microsoft代码了。如果我在别人面前找到解决方案,我会把它放在这里: - )