2008-09-06 2 views
2

ValidateEventsは素晴らしいASP.net関数ですが、黄色のScreen of Deathはあまりうまくありません。私は、HttpRequestValidationExceptionを正常に処理する方法を見つけましたhere、しかしASP.net AJAXでは正しく動作しません。HttpRequestValidationExceptionを正常に処理し、ASP.net AJAXと互換性がありますか?

基本的にTextBoxとButtonを持つUpdatePanelがあり、ユーザーがテキストボックスにHTMLを入力すると、レスポンスを変更しないというエラーメッセージのJavaScript Popupがポップアップします。

だから、HttpRequestValidationExceptionを正常に処理するにはどうすればよいのでしょうか? "通常の"リクエストの場合、エラーメッセージを表示したいだけですが、AJAXリクエストのときにリクエストを捨ててエラーを示す何かを返すので、フロントエンドのページに反応することができますか?

答えて

2

見つけたと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> 
0

hmmmm html入力やクライアント側のバリデーターを確認するには、JavaScriptを使用する必要があります。

0

これは可能な限り私が避けたいものですが、これは予想よりもはるかに複雑なようです。

通常、誰もがScriptManagerのAsyncPostBackErrorの使用を勧めていますが、Global.asaxで呼び出された場合はこれが機能しません。残念ながら、HttpRequestValidationExceptionはランタイムによって生成されるため、コードが入力されることはなく、Application_Error内で多くのことを行うことはできません。

はい、実際にはJavaScriptで行う必要があります。私は、Microsoftコードを「ハックする」必要がないように、BeginRequestHandler-Functionのような「フック」を追加する方法があることを願っています。他の誰よりも先に解決策が見つかったら、私はここに書いておきます:-)

関連する問題