2

ValidateEvents は ASP.net の優れた機能ですが、Yellow Screen of Death はあまり良くありません。ここでHttpRequestValidationException を適切に処理する方法を見つけましたが、ASP.net AJAX では正しく動作しません。

基本的に、TextBox と Button を備えた UpdatePanel を取得しました。ユーザーが HTML を Textbox に入力すると、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 で行う必要があります。Microsoft コードを「ハック」する必要がないように、BeginRequestHandler-Function のような「フック」を追加する方法があることを願っています。他の誰かよりも先に解決策を見つけたら、ここに掲載します:-)

于 2008-09-08T20:26:11.700 に答える
0

うーん、html入力またはクライアント側のバリデーターをチェックするために何らかのJavaScriptを見つける必要があるようです。

于 2008-09-07T22:04:31.410 に答える