Comment arrêter UpdatePanel de causer toute postback page?
-
05-09-2019 - |
Question
J'utilise .NET 3.5 et pages de construction à l'intérieur du serveur communautaire cadre 2008.
Sur l'une des pages, je suis en train de faire une travail UpdatePanel.
Je pris un échantillon directement sur le site Web ASP.NET, mettre à jour une fois dans un UpdatePanel à l'heure en cliquant sur un bouton, mais pour une raison quelconque quand je tente d'exécuter les fonctions toute la page est actualisée .
Voici ce que j'ai:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
Label2.Text = "Panel refreshed at " + DateTime.Now.ToString();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<fieldset>
<legend>UpdatePanel</legend>
<asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
Chaque fois que je clique sur le bouton, vous que les mises à jour du panneau - mais les messages entiers page retour! Je peux voir tout le clignotement de page. Que diable suis-je tort?
Je suis à l'intérieur d'un Masterpage imbriqué, mais je ne suis pas sûr que ce soit un problème. Pourrait-il y avoir quelque chose dans ce cadre communautaire serveur que j'utilise qui provoque tous les événements postback?
La solution
Avez-vous essayé la mise Button1
comme AsyncPostBackTrigger
dans la section Triggers? Définissez la propriété ChildrenAsTriggers
à true
et la propriété UpdateMode
à Conditional
.
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
UpdatePanel1.Update();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
<ContentTemplate>
<fieldset>
<legend>UpdatePanel</legend>
<asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
Autres conseils
Je ne vois pas Label2 dans votre exemple de code ci-dessus. Si Label2 est situé en dehors de la UpdatePanel, rafraîchir la page complète se produira parce que c'est ce qui est nécessaire pour la page de mise à jour correctement Label2.
Par défaut, UpdatePanels ne rafraîchira dynamiquement le contenu en eux, lorsqu'ils sont déclenchés par des contrôles en leur sein. Si vous devez faire des mises à jour colombophile, par exemple un bouton extérieur du panneau provoquant l'actualisation ou une étiquette dans un panneau différent pour être mis à jour, vous devez définir l'attribut conditionnel sur votre UpdatePanel (s) et de faire des appels manuels de mise à jour dans votre code.
Une autre raison possible est que si la page a ClientIDMode="static"
, commande alors que vous vous attendez à rafraîchir juste le UpdatePanel se rafraîchir la page.
Pour résoudre le problème, il vous suffit de mettre ClientIDMode="AutoID"
sur le contrôle (s) qui devrait déclencher le poste UpdatePanel retour.
Set ChildrenAsTriggers="true"
sur votre contrôle UpdatePanel.
« Par défaut, UpdatePanels ne rafraîchira dynamiquement le contenu en eux, lorsqu'ils sont déclenchés par des contrôles en leur sein. »
Sinon, la page entière sera mise à jour! Thats le point de!
Si vous avez un vieux projet qui a été mis à jour du framework .net version 1.1, puis supprimez cette ligne de votre config web pour le faire fonctionner:
<xhtmlConformance mode="Legacy"/>