2008-10-06 107 views
4

我有一个中继器控件,在页脚中有一个DropDownList。在我的代码隐藏我:Repeater控件中的DropDownList,无法触发SelectedIndexChanged

protected void ddMyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item 
      || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // Item binding code 
    } 

    else if (e.Item.ItemType == ListItemType.Footer) 
    { 
     DropDownList ddl = e.Item.FindDropDownList("ddMyDropDownList"); 
     // Fill the list control 
     ddl.SelectedIndexChanged += new 
      EventHandler(ddMyDropDownList_SelectedIndexChanged); 
     ddl.AutoPostBack = true; 
    } 
} 

页面出现回发但是我的事件处理程序不会被调用。有任何想法吗?

+0

你有工作吗?如果没有,发布一些更多信息:aspx源代码,当前代码背后,.net版本(1.1/2.0/3.5),vs.net版本(2003/2005/2008) – KyleLanser 2008-10-07 15:16:41

回答

11

如果你只是想火OnSelectedIndexChanged,这是应该的样子:

Page.aspx - 源

<FooterTemplate> 
    <asp:DropDownList ID="ddlOptions" 
      runat="server" 
      AutoPostBack="true" 
      onselectedindexchanged="ddlOptions_SelectedIndexChanged"> 
     <asp:ListItem>Option1</asp:ListItem> 
     <asp:ListItem>Option2</asp:ListItem> 
    </asp:DropDownList> 
</FooterTemplate> 

Page.aspx.cs - 代码隐藏

protected void ddlOptions_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //Event Code here. 
    } 

就是这样。没有什么是必要的。

+1

这对我不起作用。事件从未发生。 – johnny 2009-01-28 17:00:13

+0

为我工作......谢谢。 – 2009-02-03 15:25:54

2

我认为这是因为你可能没有数据绑定回发。我没有测试过,但是尝试将代码连接到您的中继器的ItemCreated事件。

1

在ASPX端的DropDownLists上,AutoPostBack属性是否设置为True?我知道有时候这个属性最初没有设置,它会阻止SelectedIndexChanged事件触发。

+0

我已经尝试在标记和代码中设置AutoPostBack -背后。 – jwarzech 2008-10-06 20:04:14

1

在这种情况下,您的父中继器(ddMyRepeater)必须在每次回发时在page_load中绑定数据。这是我发现获取嵌套控件来触发事件的唯一方法。

虽然这可能不是您的理想场景。根据你的页面正在做什么,你可能需要数据绑定这个控件两次。一旦发生事件触发,并且第二次触发事件导致中继器的数据以任何方式改变。

2

我认为问题来自于dropdownlist控件不在repeter中,而是在footer上。我不认为reperter的作用是触发页脚上的控件。您应该尝试将下拉控件置于中继器控制之外。

1

确保ViewState中的下拉列表

5

启用如果将DropDownList是一个转发器中,然后使SelectIndexChanged事件火,你需要在GridView控件/中继器禁用的EnableViewState。

例如

EnableViewState="false" 

您还需要在每次回发时数据绑定GridView/Repeater,以便在页面加载方法中将其数据绑定。

相关问题