LinkButton en ListView en UpdatePanel causa postback completo


Tengo un LinkButton en una ListView en un UpdatePanel. Me gustaría que el botón (bueno, cualquiera de ellos) causara un postback parcial, pero están causando un postback de página completa.

<asp:UpdatePanel ID="upOutcomes" UpdateMode="Conditional" runat="server">
  <ContentTemplate>
      <asp:ListView ID="lvTargets" runat="server" onitemdatabound="lvTargets_ItemDataBound">
        <ItemTemplate>
          <asp:LinkButton ID="lnkAddTarget" CssClass="lo" Text='<%# Eval("Title") + " <b>" + Eval("Level") + Eval("SubLevel") + "</b>" %>' runat="server"></asp:LinkButton>
        </ItemTemplate>
      </asp:ListView>
  </ContentTemplate>
</asp:UpdatePanel>

Encontré otro post en stackoverflow que sugirió agregar esto:

protected void lvTargets_ItemDataBound(object sender, ListViewItemEventArgs e) {
  var lb = e.Item.FindControl("lnkAddTarget") as LinkButton;
  tsm.RegisterAsyncPostBackControl(lb);  // ToolkitScriptManager
}

No ha hecho ninguna diferencia...

Hay algunos otros mensajes similares también, pero no puedo encontrar una solución! Alguna idea?

Author: James, 2011-04-13

5 answers

La configuración ClientIDMode en ASP.NET 4 le permite especificar cómo ASP.NET genera el atributo id para los elementos HTML.

En versiones anteriores de ASP.NET (es decir, pre 4), el comportamiento predeterminado era equivalente a la configuración AutoID de ClientIDMode. Sin embargo, la configuración predeterminada ahora es Predecible.

Leer artículo de Microsoft

Se requiere AutoID para esto debido a la forma en que el gestor de scripts espera que se generen los controles HTML en versiones anteriores de . NET.

 38
Author: Steve Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-20 20:54:38

Resolví este problema estableciendo: ClientIDMode="AutoID" en la directiva de página de la página aplicable así:

<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>

Esto está funcionando bien.

 1
Author: Prithivirajan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-27 10:55:45

Intenta agregar CommandName, CommandArgument atributos y el controlador de eventos OnCommand a tu linkbutton así:

<asp:LinkButton CommandName='test' CommandArgument='<%# Eval("Title") %>' ID="lnkAddTarget" runat="server" OnCommand="LinkButtonCommandEventHandler" />

O - añadiendo el controlador OnItemCommand a toda la ListView.

 0
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-13 18:21:08

Resolví este problema estableciendo: ClientIDMode="AutoID" en la directiva page de la página aplicable como así:<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>, resolviendo así mi problema anterior de tener un linkbutton ASP dentro de una ListView para causar un postback completo.

Sin embargo, esto puede requerir que cualquier control ASP en el código del cliente (Jquery, Javascript) sea referido por su nombre completo como aparece en el código fuente del navegador (uso Firebug en Firefox para obtener los nombres). Por ejemplo, esta función de Jquery $("#ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; }); ser cambiado a esto (tenga en cuenta el cambio de nombre del botón asp en el selector): $("#ctl00_ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; });

 0
Author: Kerwin Londono,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-04 15:10:05

Resolví este problema estableciendo: ClientIDMode = "AutoID"en la directiva página de la página aplicable de la siguiente manera:

 0
Author: Salman Taj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-05 17:16:19