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?

Était-ce utile?

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"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top