Postback complet déclenché par LinkButton dans GridView dans UpdatePanel

j'ai un GridView à l'intérieur d'un plan UpdatePanel. Dans un champ de modèle est un bouton que j'utilise pour marquer des articles. Fonctionnellement, cela fonctionne très bien, mais le bouton déclenche toujours un postback pleine page au lieu d'un postback partiel. Comment puis-je obtenir le bouton pour déclencher une publication partielle?

<asp:ScriptManager ID="ContentScriptManager" runat="server" />
<asp:UpdatePanel ID="ContentUpdatePanel" runat="server" ChildrenAsTriggers="true">
    <ContentTemplate>
        <asp:GridView ID="OrderGrid" runat="server" AllowPaging="false" AllowSorting="false"
            AutoGenerateColumns="false">
            <Columns>
                <asp:TemplateField HeaderText="">
                    <ItemTemplate>
                        <asp:LinkButton ID="MarkAsCompleteButton" runat="server" Text="MarkAsComplete"
                            CommandName="MarkAsComplete" CommandArgument='<%# Eval("Id") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Name" HeaderText="Name" />
                <asp:BoundField DataField="LoadDate" HeaderText="Load Date" />
                <asp:BoundField DataField="EmployeeCutOffDate" HeaderText="Cut Off Date" />
                <asp:BoundField DataField="IsComplete" HeaderText="Is Completed" />
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>
38
demandé sur NakedBrunch 2011-02-02 11:29:53

8 réponses

vous devez enregistrer chaque bouton de lien comme un AsyncPostBackTrigger. Après chaque ligne est liée dans votre GridView, vous aurez besoin de rechercher le bouton de lien et l'enregistrer par le code-derrière comme suit:

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

This requires also that ClientIDMode="AutoID" être réglé pour le LinkButton, comme mentionné ici (merci à Răzvan Panda pour le signaler).

73
répondu NakedBrunch 2017-08-20 12:28:02

ce n'est probablement pas conseillé mais vous pouvez faire fonctionner tout sur GridView de manière asynchrone en excluant L'EventName sur L'AsyncPostBackTrigger donc par exemple

<Triggers>
  <asp:AsyncPostBackTrigger ControlID="OrderGrid" />
</Triggers>

cela rendra l'événement RowCommand et tout autre événement sur le feu GridView asynchrone. Notez aussi que lorsque vous faites ClientIDMode= "Static" sur GridView, cela causera un postback complet.

5
répondu Ewert 2014-09-04 06:42:23

ma vue de grille 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 trigger = new AsyncPostBackTrigger();
            trigger.ControlID = lnk.UniqueID;
            trigger.EventName = "Click";
            UpdatePanel2.Triggers.Add(trigger);

        }
    }

et dans l'événement de clic du bouton j'ai mis:

protected void LinkButton2_Click(object sender, EventArgs e)
    {
        UpdatePanel2.Update();
    }
4
répondu sahar 2015-12-27 12:34:08

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

puisque votre LinkButton ne semble pas être un "contrôle immédiat de l'enfant", alors je recommande de configurer votre LinkButton comme un AsyncPostBackTrigger.

en dessous de votre balise , essayez d'ajouter ceci:

<Triggers>
  <asp:AsyncPostBackTrigger ControlID="MarkAsCompleteButton" EventName="Click" />
</Triggers>
1
répondu Matthew Rodatus 2011-02-08 18:28:49

mettre l'élément suivant dans le système.élément web dans web.fichier de configuration

<xhtmlConformance mode="Transitional"/>
1
répondu Sukhjeevan 2011-02-09 10:47:01

j'ai eu un problème où j'ai eu une forme de travail fine (page1), un autre faisant des dos de poteau entier (