A vueltas con esto de hacer una aplicación accesible y estándar con ASP.NET me encontré con un detalle aparentemente trivial: cómo generar un formulario estándar. Vale, utilizando un control de datos el problema «se resuelve solo», pero si pienso en un par de etiquetas con cuadros de texto para recolectar datos de forma sencilla supongo que todo el mundo pensaría en algo como esto:
<asp:label runat=»server» Text=»Nombre: » > <asp:textbox runat=»server»><br/>
…etc,etc
Lo cual nos genará un aparente formulario, pero cuyos textos están en un span. ¿Qué implicaciones tiene esto? Pues por ejemplo, que el span es un elemento inline por defecto, y nos costará un poquito más formatearlo con css, a parte de que los textos no estarán asociados a los cuadros de texto correspondientes con lo cual la accesibilidad se verá mermada. La primera solución que se nos ocurre supongo que será, ¿porqué un control de asp.net para la etiqueta? Es cierto, si substituyo el control asp.label por un label html normal con el atributo «for» establecido al id del cuadro de texto asunto resuelto!.
¿Pero qué ocurre si estas etiquetas han de ser accedidas desde servidor? ¿O simplemente si la página ha de ser localizable? Hay solución para todo, pero lo cómodo sería poder utilizar el código mostrado al principio indicándole que se renderizase como <label> en lugar de hacerlo como <span> y se estableciese el atributo «for» al id que se le asigne al control <input> que generará el control textbox. Pues bien, eso es exactamente lo que se consigue con el atributo AssociatedControlId:
<asp:label runat=»server» Text=»Nombre: » AssociatedControlId=»tbxNombre» > <asp:textbox runat=»server» ID=»tbxNombre»><br/>
Sencillo, pero hay que saberlo!!!