2016-03-15 82 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”设置为密码。

相关问题