Pregunta

Algunos antecedentes

Así que yo estaba terminando algunas mejoras en una aplicación web que hace algunos interpolación automática de datos.Hay un puñado de cuadros de texto que el usuario rellene, y otros cuadros de texto de entre ellos tienen valores calculados automáticamente.Los cuadros de texto que reciben automáticamente los valores calculados deben ser de sólo lectura para evitar que el usuario los cambios, pero no puede ser desactivado o que no se presentó en la devolución de datos.Cada uno de estos cuadros de texto también tiene una casilla de verificación junto a él de modo que un usuario puede conscientemente de verificación para hacer el campo de la escritura y por lo tanto les permite reemplazar el valor interpolado.

El navegador:IE 7 (no estoy seguro de cómo se comporta este en otros)

El problema

Cuando la configuración de la readOnly la propiedad de los cuadros de texto con JavaScript, el valor en el cuadro de texto junto con el formulario:Puedo ver que en el lado del servidor (ASP.NET) con myTextBox.Text y es en Request.Form("myTextBox").

Si he de poner ReadOnly="true" en mi <asp:TextBox /> elemento y no usar el método de JavaScript, el valor en el cuadro de texto NO disponible a partir de myTextBox.Text (Supongo que nunca lo hizo en la ViewState), pero se está haciendo presentado con el formulario: Request.Form("myTextBox") tiene un valor.

Mi pregunta(s)

¿Qué diablos está pasando?Es por este diseño?Es este un problema del navegador?Encontré un bug?Es molesto que tengo que tener algún extra JavaScript inicialmente deshabilitar el writability de los cuadros de texto cuando se carga la página, para hacer mi app de trabajo.

Gracias!

¿Fue útil?

Solución

Esto es por diseño. Como una característica de seguridad de ASP.NET, estableciéndolo en solo lectura en el servidor lo mantendrá inalterable independientemente de lo que ocurre en el cliente. Si queremos que sean capaces de anulación y de hecho presentan un valor a continuación, en realidad no es de sólo lectura en el servidor, sólo condicionalmente en el cliente. Usted puede hacer una devolución de datos cuando se marca la casilla para cambiar el atributo de sólo lectura en el servidor, o un conjunto de sólo lectura solamente el atributo en el cliente utilizando el código ASP.NET:

MyControl.Attributes.Add("readOnly","readOnly")

Otros consejos

Muy bien, me pellizqué mi muestra y creo que veo el problema -. Y yo podría estar equivocado, pero creo que se está comportando como se esperaba

Cuando se establece un campo a ser de sólo lectura en el código subyacente, la ASP:TextBox parece ser inmutable incluso de JS. Hice un cambio, y el cambio se reflejó en JS y en la forma, pero el cuadro de texto conservado su valor texto original - a no ser que me miraba en la Solicitud. Formar como lo hizo.

No creo que esto es un error. Creo que es intencional, para mantener algo completamente bloqueado -. De sólo lectura en el lado del servidor que cuelga en sí parece como una opción preferida

¿Puedo sugerir algo utilizando campos ocultos de entrada y vanos o ASP:Labels (que vaciar de su contenido como vanos) para dar un aspecto de la pantalla que no es ajustable por el usuario?

Como alternativa, si tiene acceso a una biblioteca de JS (como jQuery), podría configurar una clase CSS en sus cuadros de texto (con CssClass="readonly" o algo por el estilo en su etiqueta), a continuación, utilizar el proceso de selección para modificar la atribuir, al igual que (suponiendo jQuery, fácilmente escrito en otros idiomas):

$("input.readonly").attr("readonly","readonly");

De esta manera, usted no está reescribiendo gran parte de su margen de beneficio y es una solución quick'n'easy JS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top