2

わかりました、私はここで少し困惑しています。ページにasp:Dropdownlistがあります。次のようなWebサービス呼び出しを介してデータが入力されます。

Ajax.GetSubDevelopments(developmentId, function (results) {
    var subDevelopments = $j("#<%=ddlMinorAssociation.ClientID %>");
    subDevelopments.empty();
    $j('<option />', { value: "-1", text: "Select a sub association" }).appendTo(subDevelopments);
        $j.each(results, function (index, value) {
            $j('<option />', { value: value.SubDevelopmentID, text: value.Name }).appendTo(subDevelopments);
        });
        subDevelopments.show();
    });

実際のコントロール自体は次のようになります。

<asp:DropDownList ID="ddlMinorAssociation" 
   OnSelectedIndexChanged="ddlMinorAssociation_SelectedIndexChanged" 
   AutoPostBack="true" runat="server" CssClass="hidden">
</asp:DropDownList>

その目的は、ユーザーがサブ開発を選択すると、ポストバックして結果のデータリストをバインドすることです。現在、ページはポストバックしています。Pag​​e.Request.Params.Get( "__ EVENTTARGET")は、ドロップダウンリストが原因でポストバックしているとさえ言っています。ただし、ddlMinorAssociation_SelectedIndexChanged関数のコードは実行されていません。そのコードは次のとおりです。

protected void ddlMinorAssociation_SelectedIndexChanged(object sender, EventArgs e)
{
    Response.Write("hi");
}

誰かが何が起こっているかについていくつかの洞察を提供できますか?

4

2 に答える 2

2

この問題は、ページが読み込まれたときにドロップダウンリストに要素がなく、ViewStateに選択されたアイテムの情報がなかったという事実に関連していると思います。したがって、ポストバックすると、発生するIndexChangedイベントがないと判断されます。

ポストバックするという事実は、Autoposbackプロパティがtrueに設定されているためです。これは、基本的に通常のフォーム送信を起動します。

これを機能させるには、AutoPostbackプロパティをfalseに変更し、代わりにコードをonchangeイベントにフックしてから、サーバー側で実行する必要のあるメソッドに別のAjaxリクエストを送信し、クライアント側でデータをバインドします。

于 2012-11-09T22:10:16.413 に答える
2

サーバー側では、ドロップダウンリストにアイテムはありません。インデックスが変更されていないため、OnSelectedIndexChangedイベントを発生させることはできません。意味のある現在のインデックス値を与える項目がありません。

于 2012-11-09T22:07:10.223 に答える