Botón por defecto al presionar enter sobre el formulario ASP.NET 2.0

Cuántas veces hemos hecho alguna página y cuando la tenemos en nuestro ambiente de QA o algunos en producción, llega el usuario final y ingresa todos los input de datos y da Enter, y el formulario hace cualquier cosa menos la que tenía que hacer puesto que ejecuta el evento click de otro botón y no del que tiene que ser “pues nosotros como desarrolladores ocupamos el Ratón” 

 

Bien entonces nos encontramos con tres escenarios posibles:

Escenario 1

Tenemos una página aspx normal y queremos colocar un botón por defecto.

 

 Entonces el form nos provee esta propiedad “defaultbutton”, entonces para este escenario la solución sería definir dicha propiedad:

 

       HTML:

       <form id="form1" runat="server" defaultbutton="Button2">

       Código:

                                  If Not Page.IsPostBack Then

                        Form.DefaultButton = Me.Button2.UniqueID

      End If

Escenario 2

Tenemos una página aspx con master page y queremos colocar un botón por defecto. Bien en este escenario el form se encuentra en la Master Page, entonces si lo definimos a nivel de HTML:

 

Primer Intento

 <form id="form1" runat="server" defaultbutton="Button2">

nos dará un Error:

DefaultButton de ‘form1’ debe ser el identificador de un control del tipo IButtonControl.

Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.InvalidOperationException: DefaultButton de ‘form1’ debe ser el identificador de un control del tipo IButtonControl.

Error de código fuente:

Se ha generado una excepción no controlada durante la ejecución de la solicitud Web actual. La información sobre el origen y la ubicación de la excepción pueden identificarse utilizando la excepción del seguimiento de la pila siguiente.

 

Este error dice que el control no fue encontrado “pero si existe, yo lo acabo de crear”. Vamos a ver el HTML generado de la pagina, nos damos cuenta que el Nombre del control no es “Button2” si no “ctl00$ContentPlaceHolder1$Button2”, esto porque al estar trabajando con Master Page le coloca prefijo al nombre del control. Ah entonces si le colocamos:

 

Segundo Intento

<form id="form1" runat="server" defaultbutton=" ctl00$ContentPlaceHolder1$Button2">

Bien funciona, ¿pero funcionara en otras pagina que hagan referencia a este Master Page y que no exista un control con ese nombre? La respuesta es NO, recibimos el mismo error

 

Tercer  Intento

Bien entonces si pienso un poquitito, “¿pensar que es eso? , me estrese tanto pensar”. Si no lo puedo hacer por HTML en la Master  Page porque no encuentra el control entonces, intentare definirlo por código en la página.

 

Code:

If Not Page.IsPostBack Then

                  Me.Form.DefaultButton = Button2.UniqueID

   End If

 

                       Bien esta es la solución. Como diría mi padre, “GOOD”

 

Recomendación ocupen siempre la propiedad UniqueID que nos da el nombre único del control, también el form tiene una propiedad que se llama “defaultfocus”. ¿Para que será? Tarea para la casa.

 

  

Escenario 3

Tenemos una página aspx con dos paneles y en cada panel queremos definir botones por defecto al dar Enter sobre él:

 

Respuesta:

El control Panel también incorpora la propiedad defaultbutton” y funciona de la misma manera que la propiedad del form.

Esta entrada fue publicada en Desarrollo .NET. Guarda el enlace permanente.

5 respuestas a Botón por defecto al presionar enter sobre el formulario ASP.NET 2.0

  1. Patrick dijo:

    Buena Matías….ya era hora de que perdieras la virginidad…
     
    Saludos,
     
    tu padre!

  2. Unknown dijo:

    Give you a recommended price of the best! The most reputable (wow power leveling) and (wow gold)!

  3. Sergio dijo:

    Hola matias…
     
    Muy interesante tu explicación. Ahora, has probado esto mismo pero en relación a un UserControl.
    O sea, sabés como definirle a un control de usuario web su "defaultbutton" para que al utilizarlo desde un web form funcione?

  4. david dijo:

    muchas gracias por la ayuda, pero en mi caso existe otra opción para el escenario 2, en el caso de tener una Master y quere poner un boton por defecto añadiremos al Load de cada pantalla en el comprobador del Postback: Me.Form.DefaultButton = Button2.UniqueID.Hasta aqui bien, pero en el caso de que tengas el foco en un control de la pantalla ésta orden no funcionará. Al pulsar intro no hace nada,….Sabrias cómo solucionar esto?? Agradezco cualquier ayuda 😉

Deja un comentario