Valores Perdidos en el PostBack en ASP.NET 2.0 en TextBox cuando ReadOnly="true"

Situación:
En una pagina aspx, tenemos un Textbox con la propiedad ReadOnly="true", de manera que el textbox no se puede editar, pero queremos que su valor se envié al realizar un submit.
Como nota, debemos recordad que la propiedad "ReadOnly" es distinta de la propiedad "Enabled", ya que esta ultima, hace que el textbox no se pueda editar, y además no se tenga en cuanta al procesar el submit.
En esta situación, si realizamos cualquier cambio en el valor del textbox, mediante cualquier acción de javascript, este nuevo valor se pierde en el Postback, es decir, en la parte servidor no tenemos esta información actualizada.
  1. <asp:textbox id="TextBox1" runat="server" text="Texto" readonly="true">


Supongamos que en un momento dado se ejecuta el siguiente código javascript, que modifica en la parte cliente el valor de nuestro textbox.
  1. <script language=javascript>

  2. opener.document.Form1.textbox1.value ='Nuevo Texto';

  3. window.close();

  4. </script>


Cuando se realice un Submit de nuesta pagina, en el servidor, textbox seguirá teniendo el valor antiguo, es decir , textbox = "texto" en vez de "nuevo texto". Esto es debido a como Net 2.0 interpreta la propiedad Readonly="true".
Para solucionarlo, primero en el aspx quitamos la propiedad:
  1. <asp:textbox id="TextBox1" runat="server" text="Texto" >


Y ahora, en el load de la pagina, insertamos la propiedad "ReadOnly", con la siguiente código:

  1. textbox1.Attributes.Add("readonly", "readonly")


Si realizamos un nuevo Submit sobre la página, vemos como el textbox muestra correctamente los valores actualizados en la parte cliente entre los Postbacks.

1 comentarios:

Anónimo dijo...

Hola muchas gracias por su aporte, me ayudo de mucho en un sistema que estoy realizando y tenia ese problema de perdida de datos del textbox.

Gracias.

Atte. Jopen