2011-04-13 10 views
27

Tengo un LinkButton en un ListView en un UpdatePanel. Me gustaría que el botón (bueno, cualquiera de ellos) genere una devolución de datos parcial, pero están causando una devolución de datos de página completa.LinkButton en ListView en UpdatePanel genera devolución de datos 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 el que stackoverflow sugirió añadir esto:

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

No ha hecho una diferencia ...

Hay algunos otros puestos similares, pero yo no puedo encontrar una solución! ¿Algunas ideas?

+0

Acabo de intentarlo, gracias. Sin embargo, sin suerte. :(Necesito que actualice de forma condicional de todos modos. – James

+0

Intente completar la colección con los controles que actualizarán el panel, aunque el control esté dentro del panel. –

+0

¿Cómo lo haría? 'LnkAddTarget' no está visible fuera de ListView Gracias. – James

Respuesta

38

La configuración ClientIDMode en ASP.NET 4 le permite especificar cómo ASP.NET genera el atributo id para 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 Predictable.

Read Microsoft Article

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

+1

Gracias. Esto me volvió loco por medio día. Por mucho que lo intenté, tuve que poner una identificación en el botón de enlace y poner AutoID en la directiva de la página. – Larry

+1

medio día? He estado trabajando en esto por más de una semana ... pensé con certeza que era mi UpdatePanel o algún otro control raro que estaba usando. Resulta que era solo mi botón de enlace ... gaah ... – Rob

+1

Gracias mi buen hombre. Cambié de DataList a ListView y no pude entender por qué mi UpdatePanel dejó de funcionar de repente – Dogoku

0

Trate de añadir CommandName, CommandArgument atributos y el manejador de eventos OnCommand a su LinkButton así:

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

O - añadiendo OnItemCommand manejador a todo el ListView.

+0

Gracias por la idea, pero esto no hace la diferencia. – James

0

Resolví este problema estableciendo: ClientIDMode = "AutoID" en la directiva de página de la página correspondiente como <%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>, resolviendo así mi problema anterior de tener un botón de enlace ASP dentro de un ListView para provocar una devolución de datos completa.

Sin embargo, esto puede requerir que cualquier control ASP en el código del cliente (Jquery, Javascript) se mencione por su nombre completo tal como aparece en el código fuente del navegador (uso Firebug en Firefox para obtener los nombres). Por ejemplo, esta función Jquery $("#ContentPlaceHolder1_btnCancelReferCustomer").click(function() { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; }); fue 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

que resuelven este problema estableciendo: ClientIDMode = "AutoID" en la directiva de página de la página aplicable como ese: <% @ Título de la página = "" ClientIDMode = "AutoID" Idioma = "C#"%>

Cuestiones relacionadas