Nas versões anteriores do ASP.NET 1.x, o controle TextBox definido como ReadOnly ainda poderia obter o valor modificado no lado do servidor depois que o valor fosse alterado no lado do cliente. No entanto, no ASP.NET 2.0, essa prática era limitada. . Considera-se que isso melhora a segurança do aplicativo. A seguir está o método interno do controle TextBox para obter dados, a partir do qual podemos ver as limitações do ReadOnly:
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
string texto1 = este.Texto;
string text2 = postCollection[postDataKey];
if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
este.Texto = texto2;
retornar verdadeiro;
}
retornar falso;
}
O que está restrito aqui é apenas o atributo Text, e não há restrição no NameValueCollection do nome/valor dos dados submetidos. Portanto, o valor ainda pode ser obtido através do método Request["Form Name"]. O exemplo a seguir ilustra totalmente esse ponto e fornece uma maneira de usar ReadOnly e obter o valor por meio da propriedade Text:
<%@ Page Language="C#" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-/ /W3C/ /DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server">
protected void Button1_Click(object sender , 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 void Page_Load (remetente do objeto, EventArgs e)
{
TextBox3.Attributes.Add("somente leitura", "somente leitura");
}
</script>
<script type="text/javascript">
//<![CDATA[
função SetNewValue()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 novo valor";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 novo valor";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 novo valor";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head runat="servidor">
<title>Controle TextBox e propriedades ReadOnly e Enabled no ASP.NET 2.0</title>
</cabeça>
<corpo>
<form id="form1" runat="servidor">
<span>TextBox1 Somente leitura:</span>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" Text="TextBox1 Valor antigo"></asp:TextBox><br />
<span>TextBox2 ativado:</span>
<asp:TextBox ID="TextBox2" runat="server" Enabled="False" Text="TextBox2 Valor antigo"></asp:TextBox><br />
<span>TextBox3 Somente leitura:</span>
<asp:TextBox ID="TextBox3" runat="server" Text="TextBox3 Valor antigo"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="Modificar novo valor" OnClientClick="SetNewValue();return false;"
<asp:Button ID="Button1" runat="server" Text="Enviar" OnClick="Button1_Click" />
</formulário>
</corpo>
</html>
Para TextBox desativado, o valor modificado não pode ser obtido no lado do servidor. Se você realmente deseja usar este atributo, use o método de ocultar o campo do formulário para obtê-lo.
O TextBox com o atributo ReadOnly será exibido como tal marca no lado do cliente:
<input readonly = "readonly">
O TextBox com o atributo Enabled será exibido como tal marca no lado do cliente: <input disabled="disabled ">
De acordo com as especificações do W3C: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
A entrada definida como desabilitada terá as seguintes restrições:
· Não pode receber foco · Será ignorada ao usar a tecla tab · Pode não ser bem-sucedido.
Entradas bem-sucedidas definidas como somente leitura terão as seguintes restrições:
· Pode receber foco, mas não pode ser modificada · Pode usar a tecla tab para navegar · Pode ser bem-sucedida
Somente elementos de formulário bem-sucedidos são dados válidos, ou seja, eles podem ser submetidos. O atributo de valor das caixas de entrada de texto desabilitadas e somente leitura só pode ser modificado por meio de scripts.