JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Botón y foco por defecto en páginas ASP.NET 2.0

Un par de novedades sencillas pero muy útiles que proporciona ASP.NET 2.0 son el botón y el foco por defecto.

Ahora podemos hacer que, pulsar ENTER en un formulario, sea equivalente a hacer clic en un determinado botón. Para ello basta con establecer el atributo defaultbutton en el formulario de nuestro archivo ASPX:

<form defaultbutton=“Boton1” runat=server>

Lo más interesante de esto y que no todo el mundo sabe es que, además, se puede especificar esta misma propiedad en los paneles (controles <asp:panel>) para especificar lo mismo para los controles que hay en su interior:

<asp:panel defaultbutton=“Boton2” runat=server>

Así, cuando tengamos el foco en un control dentro del panel, al pulsar ENTER es como si se pulsase el botón especificado. Esto sobreescribe el comportamiento especificado para el formulario pero sólo dentro del panel, lo cual puede ser muy útil sobre todo si ponemos varios para propósitos diferentes.

También existe un nuevo atributo del formulario llamado deafultfocus, con el que conseguiremos que un determinado control tenga el foco nada más cargar la página ASPX. De este modo nos evitamos el tener que establecerlo con JavaScript, aunque también podríamos establecerlo en el evento Load() con el método Focus() del control en cuestión o con el método SetFocus() de la página.

José Manuel Alarcón
Banner

Comentarios (4) -

Hola,

siempre puedes convertir el control Login en una plantilla con el menú dinámico y ya tienes acceso a su control de nombre de usuario.

También puedes poner el foco en el lado cliente mediante JavaScript con sólo fijarte en el nombre que se le otorga al TextBox al renderizarlo.

saludos

JM.

Responder

Alejandro:

Lo he estado pensando y es totalmente lógico que tengas que hacer esto. El motivo es que una Master Page, aunque parezca anti-intuitivo, se convierte en tiempo de ejecución en un control pertenciente a la página que la utiliza (página "hija"), y éste a su vez contiene al resto de los controles ContentPlaceHolder que a su vez contienen a los controles propiamente dichos que había en la página "hija" (puedes comprobarlo viendo el árbol de controles que se genera activando una traza). Al pasar a ester dentro de un control contenedor éstos llevan el nombre de ese control padre adosado delante y de ahí que deba especificarse su "ruta completa" que es lo que devuelve el UniqueID.

Saludos

JM.

Responder

Pues eso sí que es raro Javier... ¿Seguro que no hay nada más que pueda influir?

En teoría no te debería pasar pues no hay diferencia en estos términos entre XP y 2003 y además ahí no influye en absolute que tengas o no VS2005 instalado.

¿Qué error de JavaScript te da exactamente? (lo sabes pulsando ese triangulito que comentas). A ver si lo solucionamos :-)

JM.

Responder

Javi:

El error se produce en el fragmento:

   WebForm_AutoFocus('ctl00$ContentPlaceHolder1$btnAccept');

de abajo del todo.

Parece que el problema está en que los Scripts que se introducen automáticamente por ASP.NET en los "includes" de la parte superior (que referncian a webresource.axd, fíjate) no están bien.
esto es frecuente cuando la versión de la plataforma .NET no es exactamente la misma en los dos sistemas en los que pruebas.
Mira a ver si la versión que tienes en el XP y en el 2003 coinciden exactamente o no. Instala los últimos parches y Service Pack de .NET en el servidor y vuelve a probar.

A ver si lo resolvemos :-)

Saludos

JM.

Responder

Agregar comentario