1

さまざまな TextBox コントロールと DropDownLists を含む AccordionPanes のコレクションがあり、それぞれに独自のバリデータがあります。

フォームの送信時にいくつかのサーバー側の検証が発生した場合、無効な検証メッセージを含む以前に最小化されたペインを自動的に展開できるものはありますか? そうしないと、ユーザーはフォームが理由なく送信できないように見えます。

別のシナリオ:クライアント側のバリデーターが入力に関連付けられた複数のペインがあるとします。ペインが最小化されている場合 (したがって、バリデータの ErrorMessage が表示されない場合)、送信時に AJAX ページの検証が行われたときに適切なペインを展開する方法はありますか?

このアプローチには、すべてのバリデーターとそれに関連する AccordionPane を追跡する強引な方法があることは知っていますが、多数の入力/バリデーターとペインの状況を処理できるより良いソリューションを望んでいました。

4

3 に答える 3

3

このようなものはどうですか(JQueryを使用していますが、プレーンなJavaScriptに変換できると確信しています)...

$(document).ready(function(){
    if (isPostback()){
        $.each(Page_Validators, function(index, validator) {
            if (!validator.isvalid) {
            // do something here to locate the accordion based on the validator
            // $(this) is the currently invalid validator element as a jquery object/wrapped set
            // so for example...
                $(this).parent().slideDown();
            // This assumes that the immediate parent of of the validator is the accordion which is unlikely but if you post your emitted html I can write the appropriate selector for you.  
            }
        });
    }
});

初期ロードで起動させたくないので、このような手法を使用できますjavascriptでポストバックを検出/追跡する方法? document.ready の後にポストバックにいるかどうかを確認します - リンクのアドバイスを使用したと仮定し、ポストバック検出のための関数は isPostback() と呼ばれます。

于 2012-10-08T13:46:51.543 に答える
1

この問題のために構築されたプロジェクトがあります。それを見てみてください。ソースをダウンロードして詳細を分析したり、必要に応じて同じコードベースを使用したりすることもできます。http://www.codeproject .com / Articles / 43397 / Validating-Accordion-and-RadPanelBar-using-Ajax-an

于 2012-10-08T17:42:17.080 に答える
1

リッチは私を打ち負かしましたが、バニラ js バージョン (ie9+) は次のとおりです。

Page_Validators
    .filter(function(v) { return !v.isvalid; })
    .forEach(function (v) { console.log(v.parentNode); });

</form> タグの下にコードを配置することを忘れないでください。jQuery の document.ready と window.onload を使用すると、asp.net から必要なすべての JavaScript が読み込まれる前にコードが実行される可能性があるため、問題が発生しました。

更新: ブラウザとの互換性が向上したバージョン

for(var i = 0; i < Page_Validators.length; i++) {
    var validator = Page_Validators[i];
    if (!validator.isvalid) {
        console.log(validator.parentNode);
    }
}
于 2012-10-08T13:56:14.007 に答える