En versiones anteriores de ASP.NET 1.x, el control TextBox establecido en ReadOnly aún podía obtener el valor modificado en el lado del servidor después de que el valor se cambiara en el lado del cliente. Sin embargo, en ASP.NET 2.0, esta práctica ha sido limitada. . Se considera que esto mejora la seguridad de la aplicación. El siguiente es el método interno del control TextBox para obtener datos, del cual podemos ver las limitaciones de ReadOnly:
bool virtual protegido LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
texto de cadena1 = this.Text;
texto de cadena2 = postCollection[postDataKey];
if (!this.ReadOnly &&!text1.Equals(text2, StringComparison.Ordinal))
{
this.Texto = texto2;
devolver verdadero;
}
devolver falso;
}
Lo que está restringido aquí es solo el atributo Texto, y no hay restricción en la NameValueCollection del nombre/valor de los datos enviados. Por lo tanto, el valor aún se puede obtener mediante el método Request["Nombre del formulario"]. El siguiente ejemplo ilustra completamente este punto y proporciona una forma de utilizar ReadOnly y obtener el valor a través de la propiedad Texto:
<%@ Page Language="C#" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-/ /W3C/ /DTD XHTML 1.0 Transitional//ES" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server">
protected void Button1_Click(objeto remitente, EventArgs e )
{
Response.Write("<li>TextBox1 = " + TextBox1.Text);
Response.Write("<li>TextBox2 = " + TextBox2.Text);
Response.Write("<li>TextBox3 = " + TextBox3.Text);
Response.Write("<li>Request.Form[TextBox1] = " + Request.Form[TextBox1.UniqueID]);
Response.Write("<li>Request.Form[TextBox2] = " + Request.Form[TextBox2.UniqueID]);
Response.Write("<li>Request.Form[TextBox3] = " + Request.Form[TextBox3.UniqueID]);
}
protegido vacío Page_Load (remitente del objeto, EventArgs e)
{
TextBox3.Attributes.Add("solo lectura", "solo lectura");
}
</script>
<tipo de script="text/javascript">
//<![CDATA[
función EstablecerNuevoValor()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 nuevo valor";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 nuevo valor";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 nuevo valor";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<cabeza runat="servidor">
<title>Control TextBox y propiedades ReadOnly y Enabled en ASP.NET 2.0</title>
</cabeza>
<cuerpo>
<form id="form1" runat="servidor">
<span>TextBox1 Sólo lectura:</span>
<asp:TextBox ID="TextBox1" runat="servidor" ReadOnly="True" Text="TextBox1 Valor anterior"></asp:TextBox><br />
<span>TextBox2 habilitado:</span>
<asp:TextBox ID="TextBox2" runat="servidor" Enabled="False" Text="TextBox2 Valor anterior"></asp:TextBox><br />
<span>TextBox3 Sólo lectura:</span>
<asp:TextBox ID="TextBox3" runat="servidor" Text="TextBox3 Valor anterior"></asp:TextBox><br />
<br />
<asp:Button ID="Botón2" runat="servidor" Text="Modificar nuevo valor" OnClientClick="SetNewValue();return false;"
<asp:ID de botón="Botón1" runat="servidor" Texto="Enviar" OnClick="Botón1_Click" />
</formulario>
</cuerpo>
</html>
Para TextBox deshabilitado, el valor modificado no se puede obtener en el lado del servidor. Si realmente desea utilizar este atributo, utilice el método de ocultar el campo del formulario para lograrlo.
El cuadro de texto con el atributo ReadOnly se mostrará como una marca en el lado del cliente:
<input readonly = "readonly">
El cuadro de texto con el atributo Enabled se mostrará como una marca en el lado del cliente: <inputdisable="disabled ">
Según las especificaciones del W3C: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
La entrada configurada como deshabilitada tendrá las siguientes restricciones:
· No se puede recibir el foco · Se omitirá al usar la tecla de tabulación · Puede que no. Las entradas exitosas
configuradas en solo lectura tendrán las siguientes restricciones:
· Puede recibir foco pero no se puede modificar · Puede usar la tecla de tabulación para navegar · Puede tener éxito
Solo los elementos de formulario exitosos son datos válidos, es decir, se pueden presentar. El atributo de valor de los cuadros de entrada de texto deshabilitados y de solo lectura solo se puede modificar mediante scripts.