1

ASP>NET AJAX を使用して Web サービスを介して入力されているドロップダウン リストがあります。JavaScript のメソッドの成功コールバックで、ループを介してドロップダウンにデータを入力しています。

function populateDropDown(dropdownId, list, enable, showCount) {
    var dropdown = $get(dropdownId);
    dropdown.options.length = 1;    
    for (var i = 0; i < list.length; i++) {
        var opt = document.createElement("option");
        if (showCount) {
            opt.text = list[i].Name + ' (' + list[i].ChildCount + ')';
        } else {
            opt.text = list[i].Name;
        }
        opt.value = list[i].Name;
        dropdown.options.add(opt);
    }
    dropdown.disabled = !enable;    
}

ただし、このコントロールがオンになっているフォームを送信すると、ポストバック時にコントロールのリストが常に空になります。データが取り込まれたリストのデータをポストバック後も保持するにはどうすればよいですか?

編集:多分私はこれに逆行しています。より良い質問は、おそらく、ページのライフサイクル全体を実行する必要があるため、updatepanel を使用せずに Web サービスからドロップダウン リストを作成するにはどうすればよいかということです。

4

2 に答える 2

4

これには Request.Form を使用する必要があります-クライアントからオンザフライでViewStateを暗号化することはできません-それはそれの全体のポイントを無効にします:)。

編集: あなたの編集への応答 :) ページ ライフサイクルは、そもそも ViewState の永続性を使用できるようにするものです。コントロール ツリーはそこで処理されますが、それを回避することはできません。

Request.Form は、これを行うための完全に実行可能な方法です。選択の値を教えてくれます。すべての値を知りたい場合は、非表示のコントロールに対してある種のシリアル化を行うことができます。

醜い、はい、しかし、それが神(彼をScottGuと呼ぶ人もいます)がASP.NET MVCを発明した理由です:)。

于 2008-10-01T02:57:35.893 に答える
3

AJAX Control Toolkit の CascadingDropDown はこれをサポートしています。

これはそれを行うように見える行です:

AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ this._selectedValue+':::'+text ]);

しかし、最も単純なアイデアは、選択した値をポストバック イベントの非表示の入力フィールドに入れることです。

于 2008-10-01T03:01:22.000 に答える