Publication complète déclenchée par LinkButton dans GridView à l’intérieur de UpdatePanel

J’ai un GridView à l’intérieur d’un UpdatePanel. Dans un champ de modèle, il y a un bouton que j’utilise pour marquer des éléments. Fonctionnellement, cela fonctionne bien, mais le bouton déclenche toujours une publication de page complète au lieu d’une publication partielle. Comment puis-je obtenir le bouton pour déclencher une publication partielle?

       <asp:LinkButton ID="MarkAsCompleteButton" runat="server" Text="MarkAsComplete" CommandName="MarkAsComplete" CommandArgument='' />           

Vous devez enregistrer chaque LinkButton comme un AsyncPostBackTrigger . Une fois que chaque ligne est liée à votre GridView, vous devez rechercher le LinkButton et l’enregistrer via code-behind comme suit:

 protected void OrderGrid_RowDataBound(object sender, GridViewRowEventArgs e) { LinkButton lb = e.Row.FindControl("MarkAsCompleteButton") as LinkButton; ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(lb); } 

Cela nécessite également que ClientIDMode="AutoID" soit défini pour le LinkButton, comme mentionné ici (merci à Răzvan Panda pour avoir souligné cela).

Ce n’est probablement pas conseillé, mais vous pouvez tout faire fonctionner de manière asynchrone dans GridView en excluant EventName sur AsyncPostBackTrigger, par exemple

    

Cela va déclencher l’événement RowCommand et tout autre événement sur GridView de manière asynchrone. Notez également que lorsque vous créez ClientIDMode = “Static” sur le GridView, cela entraînera une publication complète.

Ma vue de grid est en mode conditionnel.

 protected void gvAgendamentoExclui_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { LinkButton lnk = e.Row.FindControl("LinkButton2") as LinkButton; AsyncPostBackTrigger sortinggger = new AsyncPostBackTrigger(); sortinggger.ControlID = lnk.UniqueID; sortinggger.EventName = "Click"; UpdatePanel2.Triggers.Add(sortinggger); } } 

Et dans l’événement click du bouton de commande j’ai mis:

 protected void LinkButton2_Click(object sender, EventArgs e) { UpdatePanel2.Update(); } 

MSDN spécifie que la propriété UpdatePanel.ChildrenAsTriggers “[g] ets ou définit une valeur qui indique si les publications de contrôles enfants immédiats d’un contrôle UpdatePanel mettent à jour le contenu du panneau” (voir http://msdn.microsoft.com/en-us/ bibliothèque / system.web.ui.updatepanel.childrenassortingggers.aspx ).

Étant donné que votre LinkButton ne semble pas être un “contrôle enfant immédiat”, alors je vous recommande de configurer votre LinkButton comme un AsyncPostBackTrigger explicite.

Sous votre balise , essayez d’append ceci:

    

Placez l’élément suivant dans l’élément system.web dans le fichier web.config

  

J’ai eu un problème où j’avais un formulaire qui fonctionnait très bien ( page1 ), un autre qui faisait des post entiers ( page2 ). Lorsque je me suis rendu à la deuxième page, j’avais fait un peu trop de cut/paste , et il y avait toujours un appel javascript dans la définition du formulaire.

 < form id="form1" runat="server" onsubmit="return checkstuff();"> 

Mais checkstuff n’était pas défini à la page 2 .

supprimé le onsubmit et les messages partiels ont commencé à fonctionner.

Dans la page de travail – page 1, checkstuff été défini, mais n’était qu’un stub, qui ne faisait que rendre true. Juste pour les sourires, je mets une alerte dans le checkstuff , et bien sûr, il est appelé pour toutes les soumissions, partielles ou non. Et si je changeais le talon pour retourner simplement faux, rien ne se passa du tout.

Point dans tout cela, le javascript est toujours exercé, comme si une page complète est soumise. Vérifiez donc vos scripts côté client.

Cela peut être vieux mais ma solution consistait à placer un panneau de mise à jour à l’intérieur de itemTemplate et un autre en dehors de la grid.

le déclencheur devrait être le gridview et le déclencheur extérieur devrait être le gridview et le PageIndexChanging. Essayez ça.

Vous devez enregistrer chaque contrôle pour chaque RowState. 1: Enregistrez vos contrôles pour RowState = Alternate and Normal) 2: Enregistrez vos contrôles pour RowState = Edit 3: …

ASPX:

         

Code derrière:

 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)) { LinkButton Btn1 = e.Row.FindControl("Btn1 ") as LinkButton; ScriptManager.GetCurrent(this.Parent.Page).RegisterAsyncPostBackControl(Btn1 ); } if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit) { LinkButton Btn2 = e.Row.FindControl("Btn2 ") as LinkButton; ScriptManager.GetCurrent(this.Parent.Page).RegisterAsyncPostBackControl(Btn2 ); } }