Llevo unos días trasteando ASP.NET 2.0 y me he encontrado con un montón de problemas, funcionamientos inesperados y quebraderos de cabeza que, si bien de uno en uno son entretenidos de solucionar, todos de golpe y a cada paso que doy se hacen un poco desesperantes. Supongo que es el precio a pagar cuando uno se mete a investigar sin haberse empapado bien las especificaciones.
El último de los problemas que he solucionado y con diferencia el que más me ha costado ha sido un proeblema con los campos desactivados de un formulario. Con frecuencia se hace necesario mostrar una serie de campos en un formulario conteniendo una serie de datos pero no permitiendo que estos datos sean modificados por el usuario. Para ello se puede desactivar el campo estableciendo su atributo disabled="disabled". Pues bien, si hacemos esto, al hacer un postback del formulario al servidor los datos contenidos en los campos desactivados no se envían. Después de mucho Googlear di con el error y este se llama, como en muchos casos, especificaciones: en efecto… el estandar propone que los valores de los campos desactivados no sea enviado de vuelta al servidor en el postback.
Sin embargo, ASP.NET 2.0 provee de un mecanismo sencillo y eficaz que fuerza al navegador a enviar este tipo de campos. Realmente lo que hace es, justo antes de hacer el postback, cuando ya el usuario no puede modificar los valores, volver a activar todos los campos, logrando así que se envíen sus valores. El mecanismo en cuestión no es más que la inclusión del atributo SubmitDisabledControls en el form correspondiente. La cosa quedaría así:
<form id="form1" runat="server" SubmitDisabledControls="True">
Es un atributo que aparece en ASP.NET 2.0. Para quienes uséis ASP.NET 1.1 o anteriores deberéis buscar una forma alternativa como, por ejemplo, preparar una función javascript que, justo antes de hacer el postback/submit, vuelva a activar los controles o, o usar la propiedad ReadOnly de los INPUT en vez de Disabled o, en vez de usar controles INPUT desactivados, usar texto plano (que no es editable), etc.
EDIT: Sigue sin funcionar adecuadamente. Solución provisional: en vez de desactivar los controles con disabled="disabled" usar onfocus="this.blur();". Dejo los comentarios activados por si algún alma caritativa quiere sacarme de la ignorancia. Gracias.