how - Desactive la actualización de la página luego de hacer clic en el botón ASP.NET
evitar postback asp net c# (3)
Tengo un botón ASP que se ve así:
Default.aspx
<asp:button id="button1" runat="server" Text="clickme" onclick="function" />
Default.aspx.cs
protected void function(object sender EventArgs e)
{
// Do some calculation
}
Sin embargo, cada vez que presiono el botón, toda la página se actualiza. He buscado en este sitio y he encontrado muchas soluciones, pero ninguna de ellas funciona realmente para mi proyecto. Estas son algunas de las soluciones sugeridas:
- establecer onclick = "return false;" // pero ¿cómo ejecuto la función en el código subyacente?
- use! IsPostBack en Page_Load // pero la página aún se actualiza completamente. No quiero que se llame a Page_Load en absoluto.
- Desactivar AutoEventWireup. // hacer esto verdadero o falso no hace la diferencia.
¿Alguien tiene una solución para esto, o es realmente imposible?
Colocaría el control dentro de un panel de Actualización. Para hacerlo, también necesitarías un gestor de guiones encima, así que algo como esto:
<asp:ScriptManager runat="server" ID="sm">
</asp:ScriptManager>
<asp:updatepanel runat="server">
<ContentTemplate>
<asp:button id="button1" runat="server" Text="clickme" onclick="function" />
</ContentTemplate>
</asp:updatepanel>
si un control dentro del panel de actualización realiza una devolución de datos, solo volverá a cargar la parte de la página dentro del panel de la ventana emergente. Aquí hay un enlace que puede serle útil desde el sitio de MSDN.
Creo que hay un malentendido fundamental aquí sobre cómo funciona ASP.Net.
Cuando un usuario solicita su página por primera vez, se crea una instancia de su clase de página. El marco ASP.Net se ejecuta a través del ciclo de vida de la página con esta instancia de página para generar html. La respuesta html luego se envía al navegador del usuario. Cuando el navegador recibe la respuesta, muestra la página para el usuario. Esta es la clave: para cuando finalice la renderización, la instancia de su clase de página probablemente ya haya sido recopilada por el recolector de basura de .Net . Se fue, nunca se volvió a ver.
A partir de ahora, todo lo que su página necesita para ejecutarse en el servidor, incluido su método, es el resultado de una solicitud http completamente nueva del navegador. El usuario hace clic en el botón, se envía una nueva solicitud HTTP al servidor web, todo el ciclo de vida de la página se ejecuta nuevamente en una nueva instancia de la clase de página, y se envía una respuesta completamente nueva al navegador para volver a generar desde cero . Así es como ASP.Net (y casi cualquier otra tecnología basada en la web) funciona en su núcleo.
Afortunadamente, hay algunas cosas que puede hacer para evitar esto. Una opción es poner la mayor parte de su código Page_Load actual en un bloque if (!IsPostBack) { }
. Otra opción es configurar su método con el atributo [WebMethod]
y hacer una solicitud de ajax al método desde el botón. Otras opciones incluyen llamar a servicios web desde javascript personalizados y controles de UpdatePanel de ASP.Net.
Lo que funciona mejor dependerá de qué otras cosas estén en la página que el usuario haya cambiado.
Ese es el comportamiento normal de asp.net, en realidad está causando una postback
de la página para que se llame al evento asociado en el servidor.
Sugiero que trabaje con paneles de actualización, pero si solo necesita que algo suceda en el back-end sin que cause ningún cambio importante en la página web, usaría jquery y un servicio web. La razón principal para mí es que los paneles de actualización crean enormes objetos viewstate.
Eche un vistazo aquí para asp.net ajax: http://www.asp.net/ajax
Y aquí un ejemplo de jquery y wcf: http://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQuery