Francesc Jaumot

Entradas clasificadas como ‘Asp.net’

JavaScript y ASP.net,a la caza del PostBack!

Octubre 18, 2007 · 58 comentarios

Hola a todos/as!!!

Siempre es interesante que en una aplicación web, y por carencia de MsgBox, mostrar los errores al cliente, pedirle que entre un dato o bien simplemente mostrarle información.

Para ello, nos acompaña nuestro maravilloso script de cliente: JavaScript. Debo decir que cada día me sorprende más la potencia que se puede dar en el browser del cliente y en nuestra aplicación.

Bien, os voy a poner un pequeño ejemplo y creo que muy interesante de pedir confirmación al cliente para que nos diga si Acepta o Cancela una opción.

Lo primero es hacer aparecer ese confirm de Javascript, para ello deberemos crear un nuevo sitio web ASP.NET AJAX-Enabled Web Site en nuestro Visual Studio. Es preciso que sea así ya que debemos tener el ScriptManager para que nos gestione el script.

Ahora desde el Code behind (Default.aspx.cs o .vb) de .net ya podemos hacer aparecer nuestro confirm:

protected void funcion(){       
try       
{
/* acciones */       
}
catch (Exception ex)
{
string script = “if(confirm(‘¿Esta seguro de ” + “borrar?’)) { ” + “__doPostBack(‘Aceptar’,'true’); ” +” } else{__doPostBack(‘Cancelar’,'false’);}”; 
ClientScript.RegisterStartupScript(this.GetType(),“nombre”, script);
}   
}

Bien, y ahora para capturar el __doPostBack será necesario poner esto en el aspx, el __doPostBack de forma transparente asignara los valores a __EVENTTARGET y __EVENTARGUMENT, que deben estar al final de la web y fuera del form:

<input type=”hidden” name=”__EVENTTARGET” id=”__EVENTTARGET” value=”" />
<input type=”hidden” name=”__EVENTARGUMENT” id=”__EVENTARGUMENT” value=”" /> 

Y luego y paso final en el LOAD del aspx:

protected void Page_Load(object sender, EventArgs e)
{       
if (this.Page.IsPostBack)
       
{
           
//Recojemos los parametros del PostBack de javascript
           
string controlName = Request.Params.Get(“__EVENTTARGET”);           
string controlConf = Request.Params.Get(“__EVENTARGUMENT”);
           
//El controlConf es optativo, es el segundo parametro           
//que yo le paso true/false en el __doPostBack(‘param1′,’param2′);
    
//se puede mandar vacio si no quieres obtener argumentos de evento                   
            
switch (controlName)           
{
               
case “Aceptar”:
                   
if (Convert.ToBoolean(controlConf))
                   
{                        
//ejecutamos una acción/función
                    
}
                   
break;
                
case “Cancelar”:
                   
if (!Convert.ToBoolean(controlConf))
                   
{
                       
//ejecutamos otra acción/función
                   
}
                   
break;
           
}
 
}
  

¿Dudillas?  Sin problema, preguntarme ;)
Además aquí el enlace con el ejemplo

Categorías: Asp.net · Javascript
Etiquetado: , , , ,