Comment obtenir un bouton à l'intérieur d'un asp: UpdatePanel pour mettre à jour la page entière?

StackOverflow https://stackoverflow.com/questions/221595

Question

J'ai un bouton dans un panneau de mise à jour que je voudrais mettre à jour toute la page. J'ai défini ChildrenAsTriggers = "false" et UpdateMode = "Conditional" .

J'ai un exemple de code ici qui illustre mon problème.

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" />
      <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" />
   </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="mySecondPanel" runat="server">
   <ContentTemplate>
       <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label>

Et le code derrière:

protected void myFirstButton_Click(object sender, EventArgs e)
{
  myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss");
}
protected void mySecondButton_Click(object sender, EventArgs e)
{
  mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss");
}

Je souhaite mettre à jour l'étiquette qui ne se trouve pas dans un panneau de mise à jour lorsque l'utilisateur clique sur le deuxième bouton. Le deuxième bouton doit être dans un panneau de mise à jour. Je ne veux pas mettre la marque dans un panneau de mise à jour.

Était-ce utile?

La solution

Essayez d’ajouter un déclencheur PostBack au premier UpdatePanel, pour le deuxième bouton. Cela indiquera à ce panneau de mise à jour que le bouton doit créer une publication complète.

Autres conseils

ScriptManager.GetCurrent (Page) .RegisterPostBackControl (button); va résoudre votre problème

Si vous ajoutez un PostBackTrigger au premier panneau de mise à jour, de la même manière

<Triggers>
   <asp:PostBackTrigger ControlID="mySecondButton" />
</Triggers>

Cela provoquera un retour complet lorsque vous cliquerez sur le deuxième bouton. C’est le comportement exact que je cherchais.

J'avais un cas similaire mais légèrement plus complexe et il m'a fallu plus d'une journée pour comprendre cette réponse. (La réponse est essentiellement la même que celle donnée par @serkan. Je développe juste dessus.) Nous avions un contrôle utilisateur ASP.NET qui avait un bouton qui, lorsqu'il est cliqué, génère une image et déclenche un téléchargement de l'image. . Cela fonctionnait à merveille sur une page normale, mais pas du tout lorsque le contrôle utilisateur était incorporé dans un panneau de mise à jour. Je n'arrivais pas à comprendre comment demander au panneau de mise à jour de faire une publication régulière pour ce bouton uniquement, d'autant plus que le bouton était sous le contrôle de l'utilisateur sans accès évident depuis la page qui l'utilisait.

Ce qui a finalement fonctionné était extrêmement simple. Il n'était pas nécessaire d'essayer de spécifier le déclencheur de publication pour le panneau. Au lieu de cela, dans le Page_Load du contrôle utilisateur, , j'ai ajouté ce qui suit:

    protected void Page_Load(object sender, EventArgs e)
    {
        // If the chart is within an update panel then we need to tell the script manager
        // to not do an asynch postback on chartdownload.  If we don't, the download
        // doesn't work.
        var scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterPostBackControl(ChartSaveButton);
        }
        // Rest of Page_Load followed here...

De plus, j'ai créé la propriété ChartSaveButton pour accéder facilement au contrôle du bouton:

    private Control ChartSaveButton
    {
        get { return FindControl("btnDownloadChart"); }
    }

("btnDownloadChart" est l'ID du bouton.)

Ce fut une route pénible pour arriver ici, mais je suis heureux que la solution soit si élégante. J'espère que cela vous aidera.

pour moi, cette configuration n’a aucun sens. Gardez à l'esprit que les panneaux de mise à jour peuvent être un excellent moyen d'obtenir facilement un effet semblable à un ajax, mais qu'ils ne sont pas idéaux dans toutes les situations.

Si l'architecture de votre page nécessite la disposition des éléments comme dans votre exemple, il vaut peut-être mieux utiliser des méthodes de page ou de service avec javascript pour mettre à jour le libellé.

Si l'étiquette ne se trouve pas dans un panneau de mise à jour, le seul moyen d'actualiser la valeur consiste à actualiser la page entière comme dans une publication normale. Vous devrez faire une redirection vers la même page pour l'actualiser. Le framework ajax sait gérer les redirections même si la requête provient d’un panneau de mise à jour. Il suffit donc de faire un Response.Redirect (...) sur le clic du bouton.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top