我在转发器中有一个下拉列表。我希望每当提出回发时,然后重新绑定下拉列表。
问题是,当我调试这个东西时,代码确实通过 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"));
}
}
更新,问题已解决:
我所做的是将下拉列表绑定代码放在此转发器的预渲染事件方法中,从而可以覆盖视图状态值。