我在转发器中有一个下拉列表。我希望无论何时引发回发,然后重新绑定下拉列表。
问题是,当我对这个东西进行debbug时,代码确实通过ddl.databind()运行,但是对于一些resons,下拉列表仍然从原始viewstate加载列表和选定的值。我知道,因为如果我将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"));
}
}
更新,问题已解决:
我所做的是将dropdownlist绑定代码放在此转发器的prerender事件方法中,从而可以覆盖viewstate值。
答案 0 :(得分:0)
下拉列表可能被viewstate覆盖,请确保在页面init完成后填充它,例如在页面加载中。请参阅此处的页面循环: http://msdn.microsoft.com/en-us/library/ms178472.aspx