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:
|
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.
Buena Matías….ya era hora de que perdieras la virginidad…
Saludos,
tu padre!
Give you a recommended price of the best! The most reputable (wow power leveling) and (wow gold)!
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?
Hola Sergio y tu me puedes decir cómo utilizo esta propiedad «defaultbutton» en un UserControl.
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 😉