Accidentalmente vi esta descripción en el blog de un extranjero. Cuando el control del cuadro de texto está configurado en solo lectura y el enableviewsate de la página está configurado en falso, el valor del cuadro de texto se perderá después del envío. Esto solo sucede en asp.net 2.0. La situación no ocurrirá en asp.net 1.0/1.1, el código es el siguiente:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" EnableViewState="false" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//ES" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="servidor">
protected void Page_Load(objeto remitente, EventArgs e)
{
if (!this.IsPostBack)
{
this.Textbox1.Text = "texto de solo lectura"
}
}
protected void Button1_Click(objeto remitente, EventArgs e)
{
this.lblMessage.Text = this .Textbox1.Text;
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="servidor">
<título>Página sin título</título>
</cabeza>
<cuerpo>
<form runat="servidor" id="Form1">
<asp:textbox ID="Textbox1" runat="servidor" ReadOnly="true" ForeColor="silver"></asp:textbox>
<asp:textbox ID= "Textbox2" runat="servidor" ReadOnly="true">Algo de texto</asp:textbox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:Label ID="lblMessage" runat="servidor" Text="Label"></asp:Label>
</form>
</cuerpo>
</html>
Cuando se ejecuta en .net 2.0, el valor del cuadro de texto se perderá. Finalmente, encontré el análisis de MSDN y el centro de comentarios de ERRORES de Microsoft. De hecho, esto no es un ERROR, sino un pequeño cambio de seguridad en .net 2.0. El extracto específico es el siguiente, para que todos lo entiendan.
Los comentarios de Microsoft son:
Después de un análisis cuidadoso, la explicación del comportamiento observado es que:
Con un cambio de diseño en ASP .NET basado en preocupaciones de seguridad del usuario, la entrada para un cuadro de texto de solo lectura se guarda en viewstate, lo que no sucede si viewstate está deshabilitado. Para solucionar este problema, un desarrollador de páginas puede agregar el atributo de solo lectura al TextBox. .Colección de atributos, que luego se puede utilizar para acceder al 'valor' del cuadro de texto.
Esperamos que esto se aclare.
Servidor web y herramientas
Análisis de MSDN 2005:
El valor de Texto de un control TextBox con la propiedad ReadOnly establecida en verdadero se envía al servidor cuando se produce una devolución de datos, pero el servidor no procesa un cuadro de texto de solo lectura. Esto evita que un usuario malintencionado cambie un valor de Texto que es. de solo lectura El valor de la propiedad Texto se conserva en el estado de vista entre devoluciones de datos a menos que lo modifique el código del lado del servidor.
Fuente: blog de jackyrong