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"));
            }
        }

更新,问题已解决

我所做的是将下拉列表绑定代码放在此转发器的预渲染事件方法中,从而可以覆盖视图状态值。

4

1 回答 1

0

the drop down list is probably being overwritten by the viewstate, make sure to populate it after page init has completed, in the page load for example. See the page cycle here: http://msdn.microsoft.com/en-us/library/ms178472.aspx

于 2012-04-24T12:43:38.863 回答