AsyncPostBackTrigger仅在第一次工作

时间:2015-11-16 13:53:32

标签: c# asp.net gridview updatepanel postback

我有一个包含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事件...但是第二次触发事件时触发器无法正常工作,因为回发操作会运行。

我已经尝试过:

  • 将AsyncPostBackTrigger更改为PostBackTrigger但缺少 抛出组件异常。
  • 将updatePanel属性中的updateMode更改为&#39; Always&#39;。
  • 仅将另一个UpdatePanel放入ItemTemplate列中 下拉列表。

3 个答案:

答案 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的控件。如果之前的回复没有解决问题,您可能需要检查一下。