重新绑定转发器中的下拉列表

时间:2012-04-24 11:27:07

标签: c# asp.net drop-down-menu repeater viewstate

我在转发器中有一个下拉列表。我希望无论何时引发回发,然后重新绑定下拉列表。

问题是,当我对这个东西进行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值。

1 个答案:

答案 0 :(得分:0)

下拉列表可能被viewstate覆盖,请确保在页面init完成后填充它,例如在页面加载中。请参阅此处的页面循环: http://msdn.microsoft.com/en-us/library/ms178472.aspx