2016-03-15 79 views

回答

3

ReadOnly屬性設置爲true 包括the attribute being set

if (ReadOnly) { 
    writer.AddAttribute(HtmlTextWriterAttribute.ReadOnly, "readonly"); 
} 

然而,屬性也會影響到回發的行爲。它只會保存在視圖狀態的文本時,它的not 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; 
    } 
} 

而且控制也只嘗試to restore it時是這樣的話:

protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) { 
    // … 

    if (!ReadOnly && !current.Equals(postData, StringComparison.Ordinal)) { 
     Text = postData; 
     return true; 
    } 
    return false; 
} 
1

MSDN論壇:

當您設置只讀屬性,asp.net知道你已經標記爲只讀的 控制和改變控制的行爲方式 - 它會 添加只讀HTML屬性到呈現的控件,並且在回發時不會 處理輸入。當您通過屬性進行操作時,.net 只是簡單地將其視爲一個屬性,但沒有任何特殊邏輯會導致.net「解決」您添加的屬性意味着它應該改變控件的屬性。基本上

txtdate.Attributes.Add("readonly", 'true'); 

是沒有什麼不同

txtdate.Attributes.Add("ABC", 'DEF'); 

你的屬性代碼添加到.NET的「只讀」屬性,所以它的行爲就像 你所期望的頁面上,但隨着.NET只讀屬性沒有設置 ,.net不會修改控件在回發時的行爲方式。

類似的事情發生在設置爲密碼模式的文本框中。您可以使用 通過.Text設置您想要的任何內容,但是文本框將不會呈現值 ,因爲.net會將其模式設置爲 密碼時控制行爲的方式更改。您可以通過以這種方式在 中添加「value」屬性來繞開此問題,並將「value」設置爲密碼。

相關問題