Evitar el postback al pulsar un botón en ASP.Net

De vez en cuando reviso las palabras por las que se llega a Variable Not Found a través de los buscadores, más que nada porque suelen reflejar dudas o problemas comunes de los desarrolladores y pueden servir como inspiración sobre nuevos temas a tratar en el blog.

Pues bien, llevo tiempo observando que hay muchas personas que preguntan a Google algo similar a “anular postback en botón”, es decir, se tienen dudas sobre cómo evitar el disparo del postback al pulsar un botón de un formulario ASP.Net. El tema me ha parecido tan interesante que intentaré dar una respuesta a la duda estudiando algunas de las distintas posibilidades que pueden darse. Eso sí, si echáis en falta algún caso, no dudéis en comentarlo y lo trataremos lo antes posible.

I. ¿Hablamos de botones con lógica exclusivamente en cliente?


La primera cuestión es preguntarse para qué queremos un botón que no realice un postback al ser pulsado. Pensad que si todas las acciones desencadenadas por la pulsación del botón se realizarán en cliente es posible que no necesitemos un control ASP.Net. Imaginemos, por ejemplo, un botón que queremos que haga un cálculo en el cliente y muestre un cuadro de alerta con el resultado… ¿es necesario que sea un control de servidor (runat=”server”)? Seguro que no.

Para este caso lo más apropiado es incluir en el .aspx un HTML INPUT de los de toda la vida:

  <input id=”Button1″ type=”button” value=”button”
         onclick=”hacerAlgo();” />


Si eres de los que prefieren arrastrar y soltar, puedes hacer exactamente lo mismo utilizando los controles incluidos en la pestaña HTML de Visual Studio, en este caso el llamado Input(Button). El resultado visual será idéntico al de un Button (un botón de servidor) y estaremos aligerando tanto la página enviada al cliente como la carga del servidor.


II. Anular el postback en un botón de servidor


Otra posibilidad es que vayas a usar un control de servidor (un Button, por ejemplo) y sólo bajo determinadas circunstancias quieras anular el postback desde el cliente. Obviamente, estas circunstancias serían calculadas/obtenidas por script, por lo que podríamos aplicar un patrón como el siguiente:


<asp:Button ID=”Button1″ runat=”server”
Text=”Pulsa”
OnClientClick=”return comprueba();” />

<script type=”text/javascript”>
function comprueba() {
return confirm(“Confirme el postback”);
}
</script>

Como se puede observar, se ha modificado la propiedad OnClientClick del botón para hacer que retorne el resultado de la llamada a la función comprueba(). Si ésta retorna cierto, se realizará el postback, mientras que si retorna falso, no lo hará. En el ejemplo anterior se permite al usuario decidir si desea enviar el formulario al servidor o no.


III. Anular la posibilidad de envíos múltiples


Hay otras ocasiones, sin embargo, en las que estamos utilizando un botón de servidor de forma normal y simplemente queremos evitar duplicidades en el envío del formulario, es decir, bloquear el botón correspondiente una vez el usuario lo haya pulsado la primera vez.

Esto es muy habitual debido a la falta de feedback: el usuario envía el formulario, se impacienta esperando la respuesta o no está seguro de haberlo enviado, y cual poseso, inicia un ataque implacable sobre el botón de envío. ¿A que os suena?

El comportamiento típico, adoptado por la mayoría de sitios web, es deshabilitar el botón y seguir con el postback. Sin embargo, esto que podría ser realmente sencillo mediante scripting, causa algún que otro problema cuando el botón es de tipo Submit, puesto que en determinados navegadores (por ejemplo IE6) no realizará el envío si lo está generando un botón deshabilitado. Una forma de evitar este problema es hacer que el botón no sea de tipo submit e incluir un pequeño script:

<asp:Button ID=”Button2″ runat=”server”
Text=”Pulsa”
OnClientClick=”this.disabled=true”
UseSubmitBehavior=”False”/>

Si el botón debe ser obligatoriamente de tipo submit, se deben utilizar soluciones alternativas. Googleando un poco he encontrado varias, como deshabilitar el botón pasadas unas décimas de segundo mediante un timer, o retocar los estilos del botón para, simplemente, hacerlo desaparecer y mostrar en su lugar un mensaje informativo. La mejor, para mi gusto, consiste en capturar el evento onsubmit del formulario web, así:


<form id=”form1″ runat=”server” onsubmit=”deshabilita()”>

<script type=”text/javascript”>

function deshabilita()
{
var btn = “<%= Button1.ClientID %>”;
if (confirm(“Confirme postback”))
{
document.getElementById(btn).disabled = true;
return true;
}
return false;
}
</script>


Este último ejemplo lo he aprovechado para, además, mostrar cómo es posible realizar la captura del envío justo antes de que se produzca, en el evento OnSubmit, e introducir las confirmaciones de envío y deshabilitado de botones.

Publicado en Variable not found.

33 comentarios en “Evitar el postback al pulsar un botón en ASP.Net”

  1. La funcion “HacerAlgo();” deberá ser escrita usando forzosamente un scrip de Java?, ¿como puedo hacer para que ejecute un procedimiento en c#?
    Por tu respuesta, muchas gracias.

  2. Hola, Carlos.

    Hay varias opciones para hacer eso que dices. Una, la más simple, es usar un botón de servidor (los normales), y capturar el evento onclick del mismo.

    Si lo que quieres es invocar un método de servidor directamente desde el cliente deberás usar Ajax; es sencillo, prueba a leer estos posts:

    – Llamar a métodos estáticos con ASP.NET Ajax(http://www.variablenotfound.com/2007/05/llamar-mtodos-estticos-con-aspnet-ajax.html)

    – Llamar a servicios web usando ASP.NET Ajax (http://www.variablenotfound.com/2007/05/llamar-servicios-web-con-ajaxnet-paso.html)

    Un saludo.

  3. ¿y como se podría bloquear todos los elementos de una página a excepción de un control de usuario que tiene un botón sí, no, de modo que cuando pulse uno de los dos botones, el control deje de verse y ya se puedan pulsar otros botones, filas de gridview, etc?
    Supongo que si hubiese utilizado javascript para que mostrase directamente un cuadro de diálogo lo habría solucionado, pero el problema es que la aplicación está ya muy avanzada y no es posible volver atrás para empezar de cero.

    Gracias por adelantado

  4. Gracias! me estaba volviendo loca. Tengo un gridview con el que actualizo una tabla y al agregar filas presionando muchas veces el botón correspondiente, me agregaba tantas filas como clicks le daba al botón. Buscaba solución en google hasta que llegué a esta página y la encontré! Gracias!

  5. Hola!

    Patricia, me alegro de que te haya sido útil.

    Raúl, supongo que no he entendido muy bien tu cuestión. El bloqueo de controles es algo relativamente sencillo con javascript (como el último ejemplo del post, pero realizado por cada uno de los controles que tengas en la página), y también podrías hacerlo desde servidor usando las propiedades estándar de los controles, o incluso utilizar ASP.NET Ajax para mostrar cuadros de diálogo bloqueantes.

    La solución a emplear dependerá de las tecnologías que estés usando y de lo que pretendas hacer; si quieres enviáme un mensaje privado (usa el formulario de contacto) y seguimos profundizando en el tema.

    Saludos.

  6. Yo tengo el problema inverso. Tengo un botón que hace postback, pero una vez ya en el servidor, se ejecuta dos veces el evento. Uno al solicitarlo mediante el boton y otro el cual no se por que se ejecuta.

    Este el codigo de la pagina

    este el script cliente (sirve para deshabilitar varios botones a un tiempo, cuyos ID están en la variable _Buttons_

    function disable__buttons(ob) {
    try {
    if (typeof(Page_ClientValidate) == ‘function’)
    {
    if (Page_ClientValidate() == true )
    {
    for(var i=0; i < ob.length; i++) { var elem = document.getElementById(ob[i]) var tag_name = elem.tagName.toUpperCase() if(tag_name == "INPUT" || tag_name == "BUTTOM") { elem.disabled = true; } } } } }catch(ex) { alert(ex.message) return false } return true } y por ultimo, este es el evento Protected Sub btSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btSubmit.Click Response.Write("btSubmit_Click - in
    “)
    Response.Write(“ddlNivel.SelectedValue: ” & ddlNivel.SelectedValue & “
    “)
    If Page.IsValid Then
    ‘trata la informacion de acuerdo a opcion
    TratamientoFilas(op.Value)
    VaciarCampos(op.Value)
    Else
    msgError.Text = “ERROR: No todos los datos son correctos.”
    End If
    Response.Write(“btSubmit_Click – out
    “)
    End Sub ‘btSubmit_Click

    con sus funciones llamadas

    Private Sub VaciarCampos(ByVal op As String)
    Response.Write(“vaciarCampos – in
    “)
    Usuario.Text = String.Empty
    Clave.Text = String.Empty
    RealName.Text = String.Empty
    email.Text = String.Empty
    ddlPrestador.SelectedIndex = 0
    ddlPerfil.SelectedIndex = 0
    ddlNivel.SelectedIndex = 0
    ddlMcaHabil.SelectedIndex = 0
    msgError.Text = String.Empty
    If op <> “A” Then
    ddlUsuarios.SelectedIndex = 0
    End If
    Response.Write(“vaciarCampos – out
    “)
    End Sub

    Private Sub TratamientoFilas(ByVal op As String)
    Response.Write(“TratamientoFilas – in
    “)
    If ddlNivel.SelectedValue = -1 Then
    Response.Write(“Reentrando
    “)
    Response.End()
    End If

    ‘si es una baja
    If op = “B” Then
    ProcesarBaja()
    Exit Sub
    End If

    ‘apertura de la conexion
    Dim conn As OraDBConnector

    Try
    conn = AbrirConexionBD()
    Catch ex As Exception
    Throw New System.Exception(ex.Message)
    Exit Sub
    End Try

    ‘parametros del paquete
    Dim arr As New ArrayList

    arr.Add(conn.AddParameter(“pv_codigo”, Usuario.Text, 10))
    arr.Add(conn.AddParameter(“pv_pass”, Clave.Text, 10))
    arr.Add(conn.AddParameter(“pv_nombre”, RealName.Text, 60))
    arr.Add(conn.AddParameter(“pv_nivel”, ddlNivel.SelectedValue))
    arr.Add(conn.AddParameter(“pv_mca_habilitado”, ddlMcaHabil.SelectedValue, 10))
    arr.Add(conn.AddParameter(“pv_email”, email.Text, 100))
    arr.Add(conn.AddParameter(“pv_prestador”, ddlPrestador.SelectedValue))
    arr.Add(conn.AddParameter(“pv_perfil”, ddlPerfil.SelectedValue))
    arr.Add(conn.AddParameter(“pv_tipo_manten”, op, 1))
    arr.Add((conn.AddParameter(“pv_status”, OracleType.VarChar, 10)))

    ‘ejecuta el procedimiento
    Dim htProc As Hashtable
    htProc = conn.ExecuteStoredProcedure(“pk_net_art_traslados_admin.User_Manten_Usuario2”, arr)

    Dim status As String
    status = htProc(“pv_status”) ‘obtengo el valor status
    conn.Close()

    ‘F = Fila duplicada
    If status = “F” Then
    msgError.Text = “El usuario que intenta guardar ya existe.”
    Else
    msgError.Text = “La información se guardó correctametne”
    End If
    Response.Write(“TratamientoFilas – out
    “)
    End Sub

    Como verán, aun tiene código de debug, pues no le encuentro el porque se repite el evento.

    Si alguno tiene una idea, por favor coméntemea a julgon@gmail.com

    Le quedaré muy agradecido.

  7. Yo me he encontrado con tu problema, desconozco la razón. Pero sé qué funciona, elimina el control y creálo de nuevo (deja tu código intacto), sí funciona…pero por qué?, ni idea…

  8. Hola tengo un problema deshabilito mi boton cuando el cliente lo pulsa, pero quiero que se vuelva activar cuando el servidor resulva y muestre los resultados, no se en que evento lo puedo realizar.

    Gracias de antemano.

  9. Hola, Denise.

    Eso lo puedes hacer al menos de dos formas:

    – Una posibilidad es que se trate de un botón de servidor, deshabilitarlo en cliente (como se indica en el post), y en el tratamiento del evento onclick del mismo (en servidor), habilitarlo o hacer lo que quieras con el botón.

    – Otra posibilidad es utilizar Ajax para comunicarte con el servidor. Es decir, cuando el usuario pulse el botón, podrías desactivarlo, invocar mediante Ajax alguna funcionalidad en el servidor, y una vez ésta finalice, volver a activarlo. Algo más arriba, en otro comentario, hay un par de enlaces que te puede ayudar:

      * Llamar a métodos estáticos con Ajax: http://www.variablenotfound.com/…/llamar-mtodos-estticos-con-aspnet-ajax.html

      * Llamar a servicios web con Ajax: http://www.variablenotfound.com/…/llamar-servicios-web-con-ajaxnet-paso.html

    Un saludo.

  10. Hola, mi problema es casi igual creo yo pero es con el control DropDownList, este control es llenado desde el Servidor al cargar la pagina es llenado desde una tabla X, pasa q al cambiar de opcion me elimina los datos q he digitado hasta llegar a ese control, los borra una vez q cambio de opcion en dicho control y este cambio lo capturo en el evento TextChanged ya q ocurren cambios(desaparecen y aparecen cajas de texto, dependiendo de lo q escoja) y esta verificacion la hago en le CodeBehind, como lo puedo hacer en mi caso…

    desde ya gracias.

    Enzo

  11. Hola, Enzo.

    Por lo que me dices, entiendo que tu problema es que debes hacer aparecer y desaparecer bloques (paneles) de un formulario dependiendo del valor seleccionado en el desplegable, no?

    En este caso, una opción es configurar el DropDown con el Autopostback (entiendo que ya lo tienes así) y ajustar la visibilidad de los paneles en el evento de cambio del mismo… si es este tu caso, deberías dejar que el postback se produzca.

    Otra posibilidad es hacerlo todo en cliente (probablemente tu pregunta vaya por aquí); en ese caso, lo mejor es no habilitarle el postback (AutoPostback=false), y añadirle un controlador del evento onchange en script. Puedes hacerlo en el Load del formulario:

    if (!IsPostBack) { DropDownList1.Attributes.Add("onchange", "cambiar(this)");

    }

    
    

    Ya desde script, en la función cambiar(), puedes ocultar o mostrar los bloques a tu antojo.

    Espero que te sea de ayuda, no tengo claro si he llegado a entender bien tu pregunta…

    Saludos.

  12. José, la verdad me sorprendi gratamente por la velocidad de respuesta, Gracias.

    y si lo q necesito es lo q tu indicas la unica diferencia es q tengo q hacer aparecer o desaparecer unos TextBoxs, en la funcion cambiar, pero ahí hay algo q hago mal, a ver si me puedes orientar un poco mas, disculpa si soy un poco Nezio, jejeje.

    Code-Behind(evento Load)
    if (!Page.IsPostBack)
    {ddlRevisionInstrum.Attributes.Add(“onchange”, “cambiar(this)”);}

    Aspx
    function cambiar(){
    if(this) == ‘CAMBIO SIN COSTO’){
    $(‘txtPresupuesto’).visible = false;
    $(‘txtAbono’).visible = false;
    $(‘txtSaldo’).visible = false;
    $(‘ddlProcedePresup’).val(‘NO’)
    }else{
    $(‘txtPresupuesto’).visible = true;
    $(‘txtAbono’).visible = true;
    $(‘txtSaldo’).visible = true;
    $(‘ddlProcedePresup’).val(‘SI’)
    }
    }

    todo esto q con el AutoPostBack en False

  13. Hola, Enzo.

    Al ritmo que vamos, parece como si estuviéramos conectados al Messenger :-DD

    Lo único que tienes raro en tu código es el uso de “this”. Prueba el siguiente código y lo verás claro:

    function cambiar(o)
    {
       // Obviamente, aquí iría tu código...
       alert(o.options[o.selectedIndex].text);
    }

    El parámetro que recibe la función cambiar es una referencia al desplegable. Por eso hay que buscar el valor seleccionado accediendo a sus opciones.

    Saludos.

  14. Ah, otra cosa.

    Ten en cuenta que el nombre de tus controles, salvo que sean exclusivamente en cliente, no son del tipo “txtAbono”, esos son los nombres en servidor. Tienes que obtenerlos utilizando algo como < %= txtAbono.ClientID %>.

    Saludos.

  15. Resulto José, te agradezco mucho…

    Saludos

    PD: no es por ser abusivo, pero si tengo nuevas dudas con temas similares a este te puedo preguntar por aka o por donde(MSN, Correo..) 🙂

    pasa q al llenar una GridView me pasa lo mismo, jejeje, es decir, me borra lo ingresado, esta la lleno desde el CodeBehind, en el evento TextChanged de una txt, y al cambiar el contenido me llena una gridview en un modalpopup con un SelectLike, todo bien lo unico malo es q me elimina los datos ingresados hasta ese minuto…

    disculpa si te fastidio pero llevo varios dias dandole vueltas…

    Desde ya muchas gracias…

  16. Hola, Enzo.

    Si los controles se te vacían probablemente es porque estás realizando un postback, y o no estás usando el viewstate de forma correcta, o estás machacando los valores de los controles en algún sitio. Revisa con puntos de ruptura por dónde se está ejecutando tu aplicación y mira a ver si en el Form_Load() estás inicializándolos sin tener en cuenta si es un postback o no (con IsPostBack), comprueba si los valores están llegando al evento TextChanged… en fin, intenta realizar una traza completa y seguro que das con el problema.

    Y por supuesto, puedes preguntar por aquí todo lo que quieras. Eso sí, si tiene que ver con la temática del post, mejor. 😉

    Saludos.

  17. Yo tengo el siguiente problema:

    TEngo una aplicación web en la que creo un registro nuevo y posteriormente lo guardo. Hasta ahí, doto OK. Cambio de página para hacer otra operación y al regresar a la primera en donde registré un nuevo dato, estos no se cargan, como que se pierde algo. He checado en el codebehind y resulta que ni siquiera se ejecuta el evendo Page_Load de esa página. Que me sugieres? Saludos…

  18. Hola, Nelson.

    Tiene toda la pinta de tratarse de un problema con la caché, es decir, que tu navegador te está mostrando la misma página que antes. Si pruebas a refrescar la página, probablemente ya te muestre lo que debe.

    Si es este el caso, prueba a modificar el tiempo de expiración de la página, para que el cliente no la almacene con Response.Expires.

    Saludos.

  19. Buenas tardes, tengo un problema ojala puedan ayudarme.

    tengo un webform en el cual coloque controles DropDownList los cuales lleno con un DataTable

    Al ‘correr’ la página elijo los datos del ddl y cuando doy click en el botón de Agregar me guarda los valores que aparecen al principio es decir el primer valor que aparece en el ddl y no el que elegí, a que se deberá?

  20. Hola, tengo un TextBox, un Button y un DataTable, lo que quiero hacer es que al dar click me agregue lo que se escribie en el textBox al dataTable como una nueva fila, esto lo en el evento click, el dataTable lo he declarado como variable de instancia (fuera del evento), es solo que no me conserva la fila en cada click, creo que el postBack del Button me borra la nueva fila y no me las esta conservando, mi duda es si estoy en lo cierto o que es lo que pasa

    De antemano gracias

    espero y me puedas guiar un poco con este problema

  21. Hola.. Buenos dias, espero que me puedas ayudar con esto. Tengo una pagina asp.net con ajax en las que ejecuto controles web mediante unos link button que tienen la propiedad modal popup extender. todo esto esta dentro de un update panel Mode Conditional. El problema es que cuando ejecuto este link y cierro el panel en donde se encuentra mi control me aparecen todos los controles que se encuentran dentro del update panel y se cierran como un pantallazo. ¿Como podre evitar que se ejecuten todos los controles? Cabe mencionar que en mi maquina que tiene internet explorer 8 no lo hace, pero le instale el internet explorer 8 a mi portatil y sigue el problema. De Antemano Gracias. Buen Día

  22. hola que tal buenos dias, muchas gracias por haber hecho la explicacion acerca de como evitar el postback en el boton, yo tengo varios modalpopup dentro de mi pagina y al pulsar un control que realice el postback me muestra todos los modalpopup en un pantallazo; los postback de los botones està resuelto. Pero tengo tambien un dropdownlist en el que requiero un postback como podrè hacer para que no me afecte en mis modalpopup`s

  23. Hola José y comapañia (o sea el resto de la comunidad)!!

    En verdad es sorprendente que modificando el control se solucione el problema de repetirse la llamada.

    Bien, escribo  en este mismo post, dado que no se como ingresar uno nuevo, el problema que tengo es que no se hace el refresh en un gridviews en automático tras eliminar un registro.

    Les planteo, en el gridview tengo un buttonfield con el valor btnEliminar en su propiedad commandname

    <asp:ButtonField ButtonType=”Image” CommandName=”btnEliminar” ImageUrl=”~/Img/eliminar.ico” Text=”Eliminar” />)

    La eliminación del registro la realizó utilizando el evento RowCommand del grid, esto es:

       Protected Sub grdLista_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdLista.RowCommand

           Dim msg As String

           If e.CommandName = “btnEliminar” Then

               msg = eliminarItem(e)

               If msg <> “” Then

                   MsgBox(msg, MsgBoxStyle.Information, “SDPC-Web”)

               End If

           Else

           End If

       End Sub

    Pues bien, tras la ejecución y eliminación del registro, en pantalla sigo viendo los mismo n registros que había antes de la eliminación, dejando el efecto como si no se hubiera borrado el registro.

    En la base de datos, tras la ejecución, reviso el contenido de la tabla y efectivamente puedo ver que se borró, ¿qué esta pasando, por que no se actualiza la pantalla de forma automática?

    Saludos

    Miguel González

    jmgoc76@gmail.com

  24. Excelente articulo me soluciono varios dolores de cabeza que tenia con la anulación del postback en un botón de servidor y con los envíos múltiples, tenia varias opciones con algunas líneas de código y aun así no funcionaba bien y tu lo solucionaste con media línea

    Gracias por todo

  25. hola el error por el que se repite dos veces el click del boton submit es porque en el codigo HTML se tiene OnClick=”btSubmit_Click”

    y en el code behind el btSubmit_click() tiene Handles btnSubmit.click

    por eso repite 2 veces. Quita cualquiera, te recomiendo que quites la llamada HTML y listo

    Saludos

  26. Hola buenas tardes… espero puedas ayudarme… tengo un problema parecido pero diferente… te describo mi problema…
    Tengo 1 textbox y 2 imagebutton… un imagebutton esta en un master page y el otro en el la pagina derivada del master,junto con el textbox.
    La cosa es que primero asigne al evento ontextchange y a uno de los botones en su evento click el mismo procedimiento ya que quiero que al hacer enter en el textbox haga la misma funcion que el boton, la cual es una busqueda.
    En IE funciona bien… pero no asi en Firefox… resulta k en firefox presiono enter y se ejecuta la busqueda, hasta alli todo bien… pero tambien se ejecuta el evento del boton que se encuentra en el masterpage, la cual es para cerrar sesion. Entonces hace la busqueda y luego cierra la session.
    Bueno entonces intente por java script lo siguiente:

    function PresionarBotonSiEnter(idBoton){
    if (event.keyCode == 13)
    {
    document.getElementById(idBoton).click();
    return false;
    }

    }

    Al boton le puse la propiedad Autopostback en false y le asigne el atributo:
    textbox.Attributes.Add(“onkeypress”,”return(PresionarBotonSiEnter(‘”+btnBuscar.ClientID+”‘));”);

    funciono el script… pero para mi sorpresa tambien se ejecutaba el evento del boton cerrar sesion. Entonces kite todo lo relacionado con ese textbox, le kite el script y el autopostback se kedo en false… Lo ejecute y probe en IE y escribia, hacia enter y no pasaba nada, no hacia postback ni nada, buena señal… pero al probar en firefox… noooo alli estaba el postback de nuevo… como si el boton cerrar sesion fuera un tipo submit y al hacer enter en el textbox este fuera enviado por default.
    Bueno lo que quiero es que al hacer enter al textbox no haga un postback, si no que ejecute el script unicamente.
    Te dejo los controles tal y como aparecen en el explorador firefox:


    Espero puedas ayudarme…de antemano gracias

  27. Hola: mi problema es el siguiente. tengo un master page con varios botones que actuan como las opciones de un menu y un roundpanel que contienen otros botones para escoger la ciudad. Al cargar la master page deseo que sea visible solo el roundpanel con sus botones para que el usuario escoja la ciudad .. una vez escogida la ciudad que aparezcan los botones del menu. en el buttonClick hago false el atributo visible del roundpanel y true para los botones del menu. todo funciona bien hasta esa parte,pero al momento de hacer click en cualquier otro boton del menu se hace el postback y se carga de nuevo la master page como al inicio y me desaparece los botones del menu y hace visible de nuevo el rounpanel… que puedo hacer. Gracias de antemano

  28. Hola, Luis!

    Por alguna razón, tu sistema no es capaz de mantener el estado (visible) del control cuando pulsas sobre los botones del menú.

    Probablemente la pulsación de los botones del menú actúen como enlaces, llevando al usuario a una página independiente de la actual y por esta razón vuelve todo a estar como al principio.

    Lo único que tendrías que hacer es conseguir enviar a las páginas interiores (las que aparecen al pulsar las opciones del menú) un parámetro con la ciudad seleccionada en el querystring (es decir, en la forma loquesea.aspx?idciudad=41). Ya en la masterpage podrías preguntar por la existencia de dicho parámetro (idciudad) y mostrar u ocultar los distintos elementos.

    Espero que te sea de ayuda.

    Saludos.

  29. Hola, a ver como se podría solucionar esto. Tengo un login form cargado en un span con jquery, después de intoducir usuario y clave pulsas el botón y ejecutas code behind. Después de hacer unas comprobaciones ves que el usuario o la clave no son correctos (chequeas con la BD). Entonces quieres mostrar un mensaje de error pero sin recargar la página. El problema como has ejecutado code behind te hace el postback si o sí y te recarga el formulario con el mensaje pero en toda la pantalla, por lo que toda la estructura de tu site se va al carajo. ¿Alguna idea de como hacer esto?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *