Pregunta

Estoy utilizando .NET 3.5 y páginas de construcción dentro de la Comunidad Servidor 2008 marco.

En una de las páginas, yo estoy tratando de conseguir un trabajo 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 .

Esto 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, seguro que las actualizaciones del panel - sino a toda la página envía! Puedo ver todo el parpadeo página. ¿Qué diablos estoy haciendo mal?

Estoy en el interior de un Maestra anidada, pero no estoy seguro si esto es un problema. ¿Puede haber algo en este marco comunitario de servidor que estoy usando que hace que todos los eventos de devolución de datos?

¿Fue útil?

Solución

¿Usted intentó establecer Button1 como AsyncPostBackTrigger en la sección de disparadores? Establecer la propiedad ChildrenAsTriggers a true y la propiedad UpdateMode a 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>

Otros consejos

No estoy viendo Label2 en su muestra código de seguridad. Si Label2 se encuentra fuera del UpdatePanel, una actualización de la página completa se producirá porque eso es lo que se requiere que la página se actualizará correctamente Label2.

Por defecto, UpdatePanels refrescará solamente de forma dinámica el contenido dentro de ellos, cuando son activados por controles dentro de ellos. Si lo que necesita hacer algunos cambios más elegantes, por ejemplo un botón exterior del panel haciendo que la actualización o una etiqueta en un panel diferente a ser actualizado, entonces usted necesita para establecer el atributo condicional en su UpdatePanel (s) y hacer algunas llamadas actualización manual en el código.

Otra posible razón es que si la página tiene ClientIDMode="static", luego controla que se espera para refrescar solo será el UpdatePanel refrescar toda la página.

Para solucionar el problema, sólo tiene que establecer ClientIDMode="AutoID" en el mando (s) que debe desencadenar el puesto UpdatePanel espalda.

Conjunto ChildrenAsTriggers="true" en su control UpdatePanel.

"Por defecto, UpdatePanels se actualizará dinámicamente solamente 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!

Si usted tiene un viejo proyecto que se actualizó desde v1.1 .NET Framework, a continuación, eliminar esta línea de su web.config para que funcione:

<xhtmlConformance mode="Legacy"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top