リピーターにドロップダウンリストがあります。ポストバックが発生するたびに、ドロップダウンリストを再バインドします。
問題は、このことをデバッグすると、コードは 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 値を上書きできます。