1

リピーターにドロップダウンリストがあります。ポストバックが発生するたびに、ドロップダウンリストを再バインドします。

問題は、このことをデバッグすると、コードは ddl.databind() を介して実行されましたが、いくつかの理由で、ドロップダウンリストはリストと選択された値を元のビューステートからロードします。ddl の EnableViewState を "false" に設定すると、ddl を適切に再バインドできることがわかります。

助言がありますか?

<asp:Repeater ID="reEventsDataTypeOthers" runat="server" Visible="false">
...
<ItemTemplate>
...
<asp:DropDownList ID="ddlEventSessionLocation" runat="server" CssClass="ddlControlS1L" Title="Location" EnableViewState="true"/>

Codebehinde (_ItemCreated と _ItemDataBound でバインドしようとしましたが、両方とも失敗しました):

void reEventsDataTypeOthers_ItemCreated(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem)
                return;
            FSIDropDownList ddl = e.Item.FindControl("ddlEventSessionLocation") as FSIDropDownList;
            if (ddl != null && ddl.SelectedValue != "NOTSET")
            {
                ddl.DataSource = EventLocations;
                ddl.DataTextField = "Value";
                ddl.DataValueField = "Key";
                ddl.DataBind();
                ddl.Items.Insert(0, new ListItem("Not Set", "NOTSET"));
            }
        }

更新、問題は解決しました:

私がしたことは、このリピーターの prerender イベント メソッドにドロップダウン リスト バインド コードを配置したため、viewstate 値を上書きできます。

4

1 に答える 1

0

ドロップダウン リストは、おそらくビューステートによって上書きされています。たとえば、ページの読み込みで、ページの初期化が完了した後に必ず入力してください。ここでページ サイクルを参照してください: http://msdn.microsoft.com/en-us/library/ms178472.aspx

于 2012-04-24T12:43:38.863 に答える