despues de ello al usuario se le ocurre refrescar la pagina desde el navegador o hacer F5, ocurre
algo 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 solucionarlo
primero 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 imagen
Cuando 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 vez
ahora 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 valor
Y cuando termina de ejecutarse pasa al evento PostRequestHandlerExecute y como detecta que es un segundo postback le asigana null a la session
y al pasar nuevamente por el evento click del boton no ejecuta la accion por la Session["Key"]= null
Hola no se si falte en su codigo, lo quise implementar, pero no me funciono
ResponderEliminar