Eu acidentalmente vi essa descrição no blog de um estrangeiro. Quando o controle da caixa de texto estiver definido como somente leitura e o enableviewsate da página estiver definido como falso, o valor da caixa de texto será perdido após o envio. situação não ocorrerá no asp.net 1.0/1.1, o código é o seguinte:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" EnableViewState="false" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="servidor">
protegido void Page_Load (remetente do objeto, EventArgs e)
{
if (! this.IsPostBack)
{
this.Textbox1.Text = "texto somente leitura"
}
}
protegido void Button1_Click (remetente do objeto, EventArgs e)
{
this.lblMessage.Text = this. .Textbox1.Text
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="servidor">
<title>Página sem título</title>
</head>
<corpo>
<form runat="server" id="Form1">
<asp:textbox ID="Textbox1" runat="server" ReadOnly="true" ForeColor="silver"></asp:textbox>
<asp:textbox ID= "Textbox2" runat="server" ReadOnly="true">Algum texto</asp:textbox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
Ao executar no .net 2.0, o valor da caixa de texto será realmente perdido. Finalmente, encontrei a análise do MSDN e o centro de feedback de BUG da Microsoft. Na verdade, isso não é um BUG, mas uma pequena mudança de segurança no .net 2.0. O trecho específico é o seguinte, para que todos entendam:
O feedback da Microsoft é:
Após análise cuidadosa, a explicação para o comportamento observado é que:
Com uma alteração de design no ASP .NET baseada na preocupação com a segurança do usuário, a entrada para uma caixa de texto somente leitura é salva no viewstate, o que não acontece se o viewstate estiver desabilitado. Para solucionar isso, um desenvolvedor de página pode adicionar o atributo readonly ao TextBox. Coleção .Attributes, que pode então ser usada para acessar o 'valor' da caixa de texto
Esperamos que isso esclareça.
Servidor Web e Ferramentas
Análise do MSDN 2005:
O valor Text de um controle TextBox com a propriedade ReadOnly definida como true é enviado ao servidor quando ocorre um postback, mas o servidor não processa uma caixa de texto somente leitura. Isso evita que um usuário mal-intencionado altere um valor Text que é. somente leitura. O valor da propriedade Text é preservado no estado de exibição entre postbacks, a menos que seja modificado pelo código do lado do servidor.
Fonte: blog jackyrong