¿Colocar el atributo de solo lectura en TextBox Control en el marcado?

Tengo un control TextBox y quiero que el elemento de entrada renderizado tenga el readonly atributo con valor readonly:

<input type="text" readonly="readonly" />

Podría hacerlo en código subyacente usando el siguiente código:

textBox.Attributes["readonly"] = "readonly"

pero prefiero tener todos mis atributos de control y sus valores en mi marcado. ¿Puedo hacerlo en el marcado?
Una solución podría ser extender el control TextBox, pero esto se siente demasiado complicado para el resultado esperado.


Quiero poder cambiar el valor del lado del cliente con javascript y leer el valor del lado del servidor durante las devoluciones de datos. Tenga en cuenta que poner el TextBox.ReadOnly propiedad a True se no resuelva el problema, ya que esto también hace que el servidor ignore el valor del TextBox en las devoluciones de datos. (MSDN.) Simplemente quiero el comportamiento de solo lectura del navegador.

preguntado el 08 de noviembre de 11 a las 15:11

tal vez me equivoque, pero ¿asp.net no genera todos los atributos que agrega? ¿Ha intentado simplemente agregarlo en el diseño y ver si termina en la salida de la página? Creo que en realidad podría, ya que a veces escribo accidentalmente "clase" en lugar de "CssClass" y simplemente agrega el atributo de clase bien. -

@Bazzz: lo intenté, pero los atributos de marcado en ASP.NET no distinguen entre mayúsculas y minúsculas, por lo que arroja un error porque espera un booleano en cadena para el TextBox.ReadOnly atributo. -

Buen punto, no pensé en eso. -

4 Respuestas

Lo siguiente crea un cuadro de texto de solo lectura donde el valor del texto está disponible para el código subyacente.

Margen:

<asp:TextBox ID="Text1" runat="server" Text="One Two Three" ReadOnly="true" />

Código subyacente (C # para este ejemplo):

string someText = string.Empty;
if (Page.IsPostBack)
    someText = Text1.Text;

respondido 08 nov., 11:19

No durante las devoluciones de datos. Consulte el artículo de MSDN que vinculé en la pregunta. - Protector uno

Entonces no tiene claro qué es lo que no puede lograr con este método. El servidor no permitirá que el cliente cambie el valor, pero el valor aún está disponible para el servidor. - Jim H.

@Jim: Crikey, tienes razón. Quiero cambiar el valor del lado del cliente con javascript. - Protector uno

Luego use javascript para establecer el atributo de solo lectura del cuadro de texto en el momento de la carga. Por ejemplo, el uso de $ (document) .ready () ... $ ('# selector'). Val ('¡Cambié!'). Attr ('readonly', 'readonly') de JQuery sobrevivirá a la devolución de datos. - Jim H.

su única solución es usar js.

respondido 08 nov., 11:19

Una forma posible es utilizar un campo oculto. A medida que cambia el valor de la ReadOnly TextBox en javascript, cambie el valor también de la Campo escondido y luego acceda al valor del campo oculto en el lado del servidor

respondido 09 nov., 11:09

Parece que no puede hacerlo limpiamente en el marcado sin obtener ASP.NET's ReadOnly efectos secundarios.

Sin embargo, puede usar código en línea, aunque se ve feo.

<asp:TextBox runat="server" ID="textBox" />
<% textBox.Attributes["readonly"] = "readonly"; %>

Respondido el 09 de diciembre de 11 a las 12:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.