AsyncPostBackTrigger works only the first time

本小妞迷上赌 提交于 2019-12-24 01:51:11

问题


I have an update panel that includes a gridview. This grid has a drop down list column.

Beta aspx code:

<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>

I add the triggers of the DDL in the UpdatePanel by code:

AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = dl.UniqueID;  //dl is the Drop Down control
UpdatePanel1.Triggers.Add(trigger);

It works good at the fist selectedIndexChanged event... but the second time that the event is fired the trigger does not work correctly because a post back operation runs.

I already tried:

  • to change the AsyncPostBackTrigger to a PostBackTrigger but a missing component exception is thrown.
  • change the updateMode in theUpdatePanel attribute to 'Always'.
  • Put another UpdatePanel in the ItemTemplate Column only for the
    DropDown.

回答1:


You have to re-create the trigger on every postback. You could add this code to the Load event of the 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>

codebehind:

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);
}



回答2:


I found a solution to my own question. You were all rights: I naively forgot that the trigger did not work after the first event just because it must be recreate.

Strangely even the recreation of the trigger in the on_Load even did not resolve the problem.

I did the trick with another update panel like this:

<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>  



回答3:


In my case the issue was because I had 2 controls on the page with the same Id. You may want to check this out if the previous responses did not resolve the issue.



来源:https://stackoverflow.com/questions/33737042/asyncpostbacktrigger-works-only-the-first-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!