我有一个包含gridview的更新面板。 该网格有一个下拉列表列。
Beta aspx代码:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" EnablePartialRendering="false" UpdateMode="Conditional">
...
<asp:GridView ID="Gv_Queue" runat="server">
<Columns>
<asp:TemplateField HeaderText="H">
<ItemTemplate>
<asp:DropDownList ID="ddl_proprietà" runat="server" OnSelectedIndexChanged="ddl_proprietà_SelectedIndexChanged" AutoPostBack="true"/>
</ItemTemplate>
</Columns>
</asp:GridView
</asp:UpdatePanel>
我通过代码在UpdatePanel中添加DDL的触发器:
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = dl.UniqueID; //dl is the Drop Down control
UpdatePanel1.Triggers.Add(trigger);
它适用于第一个selectedIndexChanged事件...但是第二次触发事件时触发器无法正常工作,因为回发操作会运行。
我已经尝试过:
答案 0 :(得分:0)
您必须在每次回发时重新创建触发器。您可以将此代码添加到Load
:
DropDownList
事件中
ASPX:
<asp:TemplateField HeaderText="H">
<ItemTemplate>
<asp:DropDownList ID="ddl_proprietà" OnLoad="ddl_proprietà_OnLoad" runat="server" OnSelectedIndexChanged="ddl_proprietà_SelectedIndexChanged" AutoPostBack="true"/>
</ItemTemplate>
</asp:TemplateField>
代码隐藏:
protected void ddl_proprietà_OnLoad(object sender, EventArgs e)
{
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = ((Control)sender).UniqueID; // sender is the DropDown control
UpdatePanel1.Triggers.Add(trigger);
}
答案 1 :(得分:0)
我找到了解决自己问题的方法。 你是所有权利:我天真地忘记了第一个事件之后触发器不起作用,因为它必须重新创建。
奇怪的是,即使在on_Load中重新触发触发器也无法解决问题。
我使用另一个更新面板完成了这个技巧:
North
答案 2 :(得分:0)
在我的情况下,问题是因为我在页面上有2个具有相同Id的控件。如果之前的回复没有解决问题,您可能需要检查一下。