Cuanta veces nos ha ocurrido que en una pagina aspx, sencilla de un matenimiento simple con un boton guardar, cuando pulsamos sobre el se ejecuta el evento y el postback pero, que pasa sidespues de ello al usuario se le ocurre refrescar la pagina desde el navegador o hacer F5, ocurrealgo inesperado pues al hacer nuevamente el postback el evento del boton se vuelve a ejecutar y es como que si ubiesemos hecho click nuevamente. esto causaria molestias al usuario pues no deberia suceder.asi que voy a postear una forma practica de como solucionarloprimero tienen que crear una clase donde implementemos el IHttpModule y controlarlo mediante una sesion
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
public class HttpModuleCutom: IHttpModule, IRequiresSessionState
{
public HttpModuleCutom()
{
//
// TODO: Add constructor logic here
//
}
#region IHttpModule Members
public void Dispose()
{
//throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute += new EventHandler(context_PostRequestHandlerExecute);
}
void context_PostRequestHandlerExecute(object sender, EventArgs e)
{
if ((sender as HttpApplication).Context.Session != null)
{
if ((sender as HttpApplication).Context.Session["Key"] == null)
{
string s = System.Guid.NewGuid().ToString();
(sender as HttpApplication).Context.Session["Key"] = s;
}
else { (sender as HttpApplication).Context.Session["Key"] = null; }
}
}
y luego hay que registrarla en el web.config
<httpModules>
<add name="HttpModuleCutom" type="HttpModuleCutom"/>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
Ahora creen una pagina sencilla como la de la imagenCuando compilen y cargen la pagina esta automaticemente se va al evento PostRequestHandlerExecute donde vamos hacer el trabajo de validadcion y verifica que la session exista y si no existe la va a crear por primera vezahora al pulsar el boton se va activar el evento y es alli donde entra a tallar la clase creada pues veremos que el Session["Key"] tiene asignado un valorY cuando termina de ejecutarse pasa al evento PostRequestHandlerExecute y como detecta que es un segundo postback le asigana null a la sessiony al pasar nuevamente por el evento click del boton no ejecuta la accion por la Session["Key"]= null