有時候,我們不希望使用者直接編輯textbox,而是希望通過用戶端腳本的方式來設定内容,一般的做法是設定textbox的屬性readonly為true。但在asp.net 2.0裡有了變化,設定了readonly為true的textbox,在伺服器端不能通過text屬性擷取在用戶端設定的新内容,在reflector裡比較一下loadpostdata的實作
.net 1.1中,
bool ipostbackdatahandler.loadpostdata(string postdatakey, namevaluecollection postcollection)
{
string text1 = this.text;
string text2 = postcollection[postdatakey];
if (!text1.equals(text2))
{
this.text = text2;
return true;
}
return false;
}
.net 2.0中,
protected virtual bool loadpostdata(string postdatakey, namevaluecollection postcollection)
base.validateevent(postdatakey);
if (!this.readonly && !text1.equals(text2, stringcomparison.ordinal))
就可以看出,如果設定了readonly為true,從用戶端傳回的新的值是不被設定到text屬性的。
想要保持.net 1.*中的行為,建議的做法是設定用戶端屬性contenteditable=false,參考
sysk 118: readonly or contenteditable?
http://blogs.msdn.com/irenak/archive/2006/05/03/589085.aspx
其實如果是設定用戶端屬性的話,設定用戶端的readonly屬性應該也是可以的:
textbox1.attributes["readonly"] = "true";
-----------------------------------------------------------------
我做的小程式們
【推薦】web版短信管理平台源碼
winform版短信管理平台源碼
移動短信程式源碼win服務版(cmpp3.0/cmpp2.0協定)
移動物聯網卡短信源碼(cmpp3.0協定,支援mssql/mysql資料庫)
c#實作聯通短信sgip協定程式源碼
c#實作電信短信smgp協定程式源碼
c#實作移動短信cmpp服務端程式源碼