AsyncPostBackTrigger仅在第一次工作
本文关键字:工作 第一次 AsyncPostBackTrigger | 更新日期: 2023-09-27 18:22:02
我有一个包含网格视图的更新面板。此网格有一个下拉列表列。
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);
它在第一次选择IndexChanged事件时效果良好。。。但是在第二次触发事件时,由于运行了post-back操作,因此触发器不能正常工作。
我已经试过了:
- 将AsyncPostBackTrigger更改为PostBackTriger,但缺少引发组件异常
- 将UpdatePanel属性中的updateMode更改为"始终"
- 将另一个UpdatePanel放在ItemTemplate列中,仅用于
DropDown
您必须在每次回发时重新创建触发器。您可以将此代码添加到DropDownList
:的Load
事件中
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);
}
我找到了自己问题的解决方案。你是对的:我天真地忘记了触发器在第一个事件后不起作用,只是因为它必须重新创建。
奇怪的是,即使在on_Load中重新创建触发器也没有解决问题。
我用另一个更新面板这样做了:
<asp:TemplateField HeaderText="H">
<ItemTemplate>
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="ddl_proprietà" runat="server" OnSelectedIndexChanged="ddl_proprietà_SelectedIndexChanged"
AutoPostBack="true"/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl_proprietà" />
</Triggers>
</asp:UpdatePanel>
</ItemTemplate>
</asp:TemplateField>
在我的案例中,问题是因为页面上有两个Id相同的控件。如果以前的响应没有解决问题,您可能需要检查一下。