¿Cómo asignar un botón por defecto en un formulario asp.net?

En muchas ocasiones desarrollamos sitios o aplicaciones web las cuales en la mayoría de los casos al estar en un ambiente de producción y llegar hasta el usuario final, este, presiona la tecla “ENTER” en cualquier textbox del formulario lo que provoca que se dispare el evento click de muy posiblemente un botón que no hemos programados.

Lo que sucede es que bajo el comportamiento web, de forma automática se adquiere un botón por defecto, el cual será, el primero botón que se encuentre en el esquema HTML, es decir, de arriba hacia abajo.

Lo que proboca encontrarnos 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:

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

También podemos definirla a través del código fuente.

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 nos dara un error.

Este error dice que el control no fue encontrado “pero si existe, yo lo acabo de crear” diremos muchos. 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. La respuesta es sencilla, utilizar como boton por defecto el nombre generado en HTML, sin embargo intentar definir ese nombre tan largo es un poco problematico por lo que otra solución sencilla seria establecer la propiedad a travez del codigo fuente.

If Not Page.IsPostBack Then
   Me.Form.DefaultButton = Button2.UniqueID
End If

Bien esta es la solución.

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:

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

Deja un comentario

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