偶然在一個老外的blog裡看到有這樣的描述,當textbox控件裡被設置為readonly時,而且頁面的enablevIEwsate設置為false時,提交後,textbox的值會丟失,這只發生在asp.net 2.0中,在ASP.Net 1.0/1.1中不會出現這樣的情況,代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.ASPx.cs" EnableVIEwState="false" Inherits="_Default" %>
<!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 Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.Textbox1.Text = "readonly text";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.lblMessage.Text = this.Textbox1.Text;
}
</script>
<html XMLns="http://www.w3.org/1999/xHtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<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">Some Text</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>
在.net 2.0下運行,的確會丟失了文本框的值。最後,找到了MSDN的解析和微軟的BUG反饋中心,其實這不是BUG,是.Net 2.0下為了安全的一個小改變