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

AsyncPostBackTrigger仅在第一次工作

您必须在每次回发时重新创建触发器。您可以将此代码添加到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相同的控件。如果以前的响应没有解决问题,您可能需要检查一下。