![](/img/trans.png)
[英]Why ASP.NET Ajax ColorPickerExtender control returns nothing when the TextBox ReadOnly set to “True”?
[英]What is the difference between ReadOnly=true and TextBox1.Attributes.Add(“readonly”, “readonly”) in ASP.NET?
我有一個文本框,我只讀它但想要回發它的值。 之前我將代碼設置為:
<asp:TextBox ID="textbox1" runat="server" ReadOnly="true">/asp:TextBox>
它不起作用。 我刪除了ReadOnly="true"
,在代碼中我放了以下一行
txtContractStartDate.Attributes.Add("readonly", "readonly");
為什么它開始回發數據?
將ReadOnly
屬性設置為true 包括 要設置的屬性 :
if (ReadOnly) {
writer.AddAttribute(HtmlTextWriterAttribute.ReadOnly, "readonly");
}
但是,該屬性也會影響回發行為。 當它不是只讀時 (縮短原始代碼),它只會將文本保存在視圖狀態中:
private bool SaveTextViewState {
get {
if (TextMode == TextBoxMode.Password) {
return false;
}
if (Events[EventTextChanged] != null || !IsEnabled || !Visible || (ReadOnly) || this.GetType() != typeof(TextBox)) {
return true;
}
return false;
}
}
在這種情況下,控件也只會嘗試恢復它 :
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
// …
if (!ReadOnly && !current.Equals(postData, StringComparison.Ordinal)) {
Text = postData;
return true;
}
return false;
}
來自MSDN論壇:
當您設置readonly屬性時,asp.net知道您已將控件標記為只讀並改變控件的行為方式 - 它將向呈現的控件添加readonly html屬性,並且不會在回發時處理輸入。 當您通過屬性執行此操作時,.net只是將其視為屬性,沒有特殊的邏輯導致.net“計算”您添加的屬性意味着它應該改變控件的屬性。 基本上
txtdate.Attributes.Add("readonly", 'true');
與.net沒有什么不同
txtdate.Attributes.Add("ABC", 'DEF');
您的屬性代碼添加了“readonly”屬性,因此它的行為與您在頁面上的預期相似,但由於尚未設置.net ReadOnly屬性,.net不會修改控件在回發時的行為方式。
將文本框設置為密碼模式時會發生類似情況。 您可以通過.Text設置任何所需的內容,但文本框不會將值呈現為.net會更改控件在其模式設置為“密碼”時的行為方式。 您可以通過以這種方式添加“value”屬性來規避這一點,並將“value”設置為密碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.