2016-03-15 3 views
3

У меня есть текстовое поле, которое я только что прочитал, но хочу вернуть его значение. Ранее я установил код:В чем разница между ReadOnly = true и TextBox1.Attributes.Add («readonly», «readonly») в ASP.NET?

<asp:TextBox ID="textbox1" runat="server" ReadOnly="true">/asp:TextBox> 

Он не работал. Я удалил ReadOnly="true" и код, который я поставил следующую строку

txtContractStartDate.Attributes.Add("readonly", "readonly"); 

Почему это начать размещение данных обратно?

ответ

3

Установка ReadOnly свойство истинного включает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'); 

ничем не отличается в .net, чем

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

Ваш код атрибута добавляет «только для чтения» атрибут так он ведет себя как вы ожидали бы на странице, но как .net ReadOnly свойство не установлено , .net не изменяет поведение элемента управления при обратной передаче.

Аналогичная ситуация происходит с текстовым полем, установленным в режим «Пароль». Вы можете установить что угодно, используя .Text, но текстовое поле не будет отображать значение , так как .net изменяет способ управления, когда его режим установлен на Пароль. Вы можете обойти это, добавив атрибут «значение» в таким образом, и установите «значение» в качестве пароля.

Смежные вопросы