2010-02-10 11 views
11

Quiero interceptar las devoluciones de datos en la página actual ANTES se produce. Quiero hacer algo de manipulación personalizada antes de que se sirva una devolución de datos. Alguna idea de como hacer eso?¿Cómo se intercepta una devolución de datos en una página? - ASP.NET

+0

Sea más específico: ¿qué quiere decir con "antes de la devolución de datos"? –

+0

Usted dice en sus requisitos que quiere interceptar una devolución de datos * cuando * ocurre, pero en sus comentarios a los contestadores dice que quiere interceptarlo * antes *. ¿Cuál quieres? ¿Quieres hacerlo del lado del cliente o del servidor? – slugster

+0

Perdón por la confusión. Editó la pregunta para dejarlo en claro. Quiero interceptarlo antes de que ocurra. Quiero hacerlo en el lado del servidor. Sin embargo, también me puede interesar saber cómo hacerlo en el lado del cliente. – NLV

Respuesta

20

Hay un par de cosas que puede hacer para interceptar una devolución de datos en el cliente.

La función __doPostBack se ve así:

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 

en cuenta que se llama "theForm.onsubmit()" antes de hacerlo la devolución de datos. Esto significa que si asigna a su formulario una función onsubmit javascript, siempre se llamará antes de cada devolución de datos.

<form id="form1" runat="server" onsubmit="return myFunction()"> 

Alternativamente, usted puede reemplazar la función __doPostBack y sustituirlo por el suyo propio. Este es un viejo truco que se usó en ASP.Net 1.0 días.

var __original= __doPostBack; 
__doPostBack = myFunction(); 

Esto reemplaza la función __doPostBack con la suya, y puede llamar al original de la nueva.

+0

¡Perfecto! Trabajé exactamente de la manera que quiero. – NLV

+1

¿Cómo puede __doPostBack = myFunction(); ¿trabajo? ¿No debería ser __doPostBack = myFunction? –

0

no estoy seguro, pero creo que busca ..

if (Page.IsPostBack) 
    { 
    } 
+0

Quiero hacer algunas manipulaciones antes de que se sirva una devolución de datos. No después de que la devolución de datos haya sucedido. Espero que lo entiendas – NLV

1

Page.IsPostBack es su amigo.

+1

Quiero hacer algunas manipulaciones antes de que se sirva una devolución de datos. No después de que la devolución de datos haya sucedido. Espero que lo entiendas – NLV

1

Puede verificar una devolución de datos en uno de los eventos de página para su formulario.

Si desea realizar alguna acción en la devolución de datos que implique la creación de controles o la manipulación de viewstate, es posible que desee entrar en un evento anterior como Page_Init.

Prueba esto:

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack) 
     { 
      //Check for your conditions here, 

      if (Page.IsAsync) 
      { 
       //also you may want to handle Async callbacks too: 
      } 
     } 
    } 
+0

Quiero hacer algunas manipulaciones antes de que se sirva una devolución de datos. No después de que la devolución de datos haya sucedido. Espero que lo entiendas – NLV

2

Para obtener la devolución de datos antes de una página hace, puede crear un HttpHandler e implementar la función ProcessRequest.

Compruebe this Scott Hanselman link para una buena publicación de blog sobre cómo hacerlo (incluido el código de muestra).

+0

Gracias por el enlace. – NLV

6

Use las siguientes opciones

Todas las opciones trabaja con ajax habilitado formas y formas simples.
return false para cancelar enviar dentro de cualquier manejador de envío.

Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "submit-handler", "alert(\"On PostBack\");"); 

Javascript Equivalente --No utilizar este código con el código anterior simultáneamente

// Modify your form tag like this 
<form onsubmit="javascript:return submit_handler();" ...> 

// Add this script tag within head tag 
<script type="text/javascript"> 
    function submit_handler() { 
     // your javascript codes 
     // return false to cancel 
     return true; // it's really important to return true if you don't want to cancel 
    } 
</script> 

Y si quieres un control completo sobre __doPostBack puso este guión junto a su etiqueta de forma

<script type="text/javascript"> 
    var default__doPostBack; 
    default__doPostBack = __doPostBack; 
    __doPostBack = function (eventTarget, eventArgument) { 
     // your javascript codes 
     alert('Bye __doPostBack'); 
     default__doPostBack.call(this, eventTarget, eventArgument); 
    } 
</script> 

Probado con ASP.NET 4.0

Cuestiones relacionadas