我有一个转发器控件,在页脚中我有一个DropDownList。在我的代码隐藏中,我有:
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;
}
}
该页面显示为PostBack,但我的EventHandler未被调用。有什么想法吗?
答案 0 :(得分: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 :(得分:5)
如果DropDownList在Repeater中,然后激活SelectIndexChanged事件,则需要在GridView / Repeater上禁用EnableViewState。
e.g。
EnableViewState="false"
您还需要在每个回发上对GridView / Repeater进行数据绑定,以便在Page Load方法中对其进行数据绑定。
答案 2 :(得分:2)
我认为这是因为你可能不会在回发上进行数据绑定。我没有测试过这个,但是尝试将代码挂钩到转发器的ItemCreated事件上。
答案 3 :(得分:2)
我认为问题来自于dropdownlist控件不在repeter中,而是在页脚上。我不认为reperter的出现会触发页脚上的控件。您应该尝试将dropdowncontrol放在转发器控件之外。
答案 4 :(得分:1)
ASPX端DropDownLists上的AutoPostBack属性是否设置为True?我知道有时这个属性最初没有设置,它会阻止SelectedIndexChanged事件被触发。
答案 5 :(得分:1)
在这种情况下,您的父转发器(ddMyRepeater)必须在每次回发时在page_load中数据绑定。这是我发现获取嵌套控件来触发事件的唯一方法。
但这可能不适合您。根据页面的作用,您可能需要对此控件进行两次数据绑定。一旦触发事件,第二次触发事件导致转发器的数据以任何方式改变。
答案 6 :(得分:1)
确保为下拉列表启用ViewState