7

1つのページに2つのASP.NETドロップダウンリストコントロールがあります。1つ目はサーバーにコールバックし、配列を取得します。この配列はクライアントに返され、javascriptを介して2つ目のドロップダウンリストに入力するために使用されます。ただし、2番目の(および新しく入力された)ドロップダウンリストで選択を行ってからポストバックを実行すると、2番目のドロップダウンリストの選択と内容が失われます。選択した値を取得し、ポストバック後にリストの内容を保持する必要があるため、これは問題です。

これを修正するにはどうすればよいですか?ポストバックの前のある時点でビューステートを更新することだと思いますか?


私が入力しているコントロールは、ASP.NETドロップダウンリストです。これが私がそれらを移入するために使用しているjavascriptです。

使用されているコードは次のとおりです(簡潔にするために少し切り詰めています)。

私が入力しているASP.NETコントロール:

<asp:DropDownList ID = "ddlStateCounty" runat = "server" OnSelectedIndexChanged = "ddlStateCounty_OnSelectedIndexChanged" AutoPostBack = "true" />

カンマ区切りの値のリストを取得するコールバックコード:

public void RaiseCallbackEvent(string eventArgument)
    {
    return "1, 2, 3";
}

Javascriptポピュレーションコード:

function ReceiveServerData(retValue)
{ 
    var statesArray = retValue.split(',');
    var statesList = document.getElementById('{0}');

    if (statesArray.length > 0 && statesList != null)
        {
                for (var j = 0; j < statesArray.length; j++)
            {
                    var newOption = document.createElement('OPTION');
                        statesList.options.add(newOption);
            newOption.value = statesArray[j].toString().trim();
                    newOption.innerText = statesArray[j];
                }
    }
}
4

4 に答える 4

6

ViewState 権限がないと述べたのは正しいため、データをサーバーに戻すときに値が入力されません。

ASP.NET AJAX コントロール ツールキット (.NET 2.0 と .NET 3.5 の両方のリリースがあります) 内でカスケーディング ドロップダウンを使用するように移行することを強くお勧めます。

もう 1 つのオプションはonchange、JavaScript が入力されたドロップダウン リストにイベントを設定し、非表示のフィールドにデータを入力することです。これは、サーバーにポスト バックされ、送信の値がポストされたデータ内に維持されるためです。お気に入り:

$addHandler('change', $get('dynamicDDL'), function () { $get('hiddenField').value = this.options[this.selectedIndex].value; });

デモでは、イベントの追加などに MS AJAX の短縮形を使用しました。使用した方法の詳細については、http: //msdn.microsoft.com/en-au/library/bb397536.aspxを参照してください

于 2009-01-06T12:34:40.587 に答える
3

Request.Form[Control.UniqueID] は、選択した値を提供します。

于 2009-08-03T05:06:34.017 に答える
1

response.formsコレクションを使用して、選択した値を取得するだけです。

于 2009-01-06T12:14:49.083 に答える
0

私は「あなたはasp.netのやり方で物事をやっていない」と推測しています。

javascriptの変更がネイティブのasp.netでない場合、入力している要素はasp.netコントロールではないため、ポストバックでそれらを失っているように思われます。asp.netは、そのモデルと実際のページの間の緊密なバインドを実際に要求します。

ただし、ベースから大きく外れている可能性があります。コードを投稿できれば役立つでしょう。(JSとコードビハインドメソッド)

新しい情報を編集する:

そうです-つまり、基本的には、AJAX化された戻り文字列(?)に基づいてJSだけで完全に正常なhtml要素のロードを作成しています。これは背後のasp.netコードには何の概念もありません。自分でテストアプリを設定しないと、これが問題になるかどうかは100%わかりませんが、ほぼ正しいように聞こえます。

次に、Request.Formsを検査することは、他の人が示唆しているように、今のところこれを修正する最も簡単な方法ですが、asp.netは、思い通りに物事を行うことから逸脱するほど、ますます苦痛になることを覚えておく必要があります。あなたに。コードビハインドからこれらの新しいオプションを追加する方法を検討する価値があると思います。

于 2009-01-06T12:07:33.200 に答える