2009-04-07 16 views
12

Estoy usando .NET 3.5 y construyendo páginas dentro del marco de Community Server 2008.¿Cómo evitar que UpdatePanel cause la devolución de datos de toda la página?

En una de las páginas, estoy tratando de que funcione un UpdatePanel.

Me tomó una muestra directamente desde el sitio web ASP.NET, actualización de una vez en un UpdatePanel a la hora haciendo clic en un botón, pero por alguna razón cuando intento realizar la función enteros se actualice la página.

Aquí es lo que tengo:

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> 

Cada vez que haga clic en el botón, de que las actualizaciones del panel - sino a toda la página envía! Puedo ver toda la página parpadeando. ¿Qué diablos estoy haciendo mal?

Estoy dentro de una página maestra anidada, pero no estoy seguro si esto es un problema. ¿Podría haber algo en este marco de servidor de la comunidad que estoy usando que haga que todos los eventos se devuelvan?

Respuesta

16

¿Ha intentado configurar Button1 como AsyncPostBackTrigger en la sección Disparadores? Establezca la propiedad ChildrenAsTriggers en true y la propiedad UpdateMode en 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> 
+0

¡Muchas gracias! – user53885

+0

la sección del gatillo con el asyncpostbacktrigger hizo mi día, ¡muchas gracias! – BitQuestions

+0

¿Alguien puede explicar por qué se requiere este disparador asíncrono explícito? ¿No se supone que los controles dentro de un UpdatePanel provocan una actualización parcial de la página de forma predeterminada? – drizin

6

No veo Label2 en el ejemplo de código anterior. Si Label2 se encuentra fuera de UpdatePanel, se producirá una actualización de página completa porque eso es lo que se requiere para que la página actualice correctamente Label2.

De forma predeterminada, UpdatePanels solo actualizará dinámicamente el contenido dentro de ellos, cuando se active mediante controles dentro de ellos. Si necesita hacer algunas actualizaciones más elegantes, digamos un botón fuera del panel que hace que se actualice la actualización o una etiqueta en un panel diferente, entonces debe establecer el atributo Condicional en su (s) Panel (es) de Actualización y realizar algunas llamadas de Actualización manual. en tu código

+0

¡Muchas gracias! – user53885

2

Establezca ChildrenAsTriggers="true" en su control UpdatePanel.

2

"Por defecto, UpdatePanels refrescará solamente de forma dinámica el contenido dentro de ellos, cuando son activados por controles dentro de ellos."

De lo contrario, toda la página se actualizará. ¡Ese es el punto!

2

Otra posible razón es que si la página tiene ClientIDMode="static", entonces los controles que espera actualizar solo UpdatePanel actualizarán toda la página.

Para solucionar el problema, solo necesita establecer ClientIDMode="AutoID" en los controles que deben activar la publicación UpdatePanel.

Cuestiones relacionadas