lunes, 27 de octubre de 2008

TextBox de ASP.NET 2.0 que pierden los cambios si están en modo readonly


Problema.

Os comento un tema que me paso con un TexBox (o caja de texto) de ASP.NET que tiene una fácil solución pero que me dio muchos quebraderos de cabeza la cosa.

El tema es que tenia un texbox de solo lectura, con la propiedad 'readonly' establecida a true, apra que el usuario no pudiese cambiar la caja de texto. Esta caja de texto era una caja de texto de totales donde mediante un script de javascript se establece el total de una factura.

El caso es que este total precalculado, tenía que meterlo en la base de datos cuando el usuario grabara la factura, al pulsar sobre el botón 'grabar'. Pero cual es mi sorpresa que al hacer el postback, el valor del campo introducido con JavaScript, no se conservaba y siempre era 'null'.


La solución.

Después de indagar mucho en el tema, parece ser que la culpa la tiene la propiedad 'readonly' establecida desde las propiedades de ASP.NET. Si esta propiedad está establecida, al hacer el postback los valores de los campos que tengan readonly = true no se transmiten al servidor.

Por tanto al intentar establecer el valor de este campo, con una función JavaScript en el lado del cliente el valor de dicho campo no se transmite y le perdemos.

Pero claro, yo necesitaba que ese campo fuera de solo lectura para que el usuario n opudiera cambiar su valor. Adopte la solución de establecer el campo "ReadOnly" = true, y después el el script del lado del servidor en el evento Page_Load de la página correspodiente establecer el atributo de solo lectura asi:

TxtBxImporte.Attributes.Add("readonly", "readonly");

Con esto establecemos el atributo readonly pero como propiedad HTML del campo directamente y solventamos el problema. Para ASP.NET ese campo no es 'readonly' (porque su propiedad está establecida a true), pero para el navegador, del lado del cliente es un campo readonly.

Espero que esto os sirva.

Un saludo.


No hay comentarios.: