Возможно, это связано с тем, что свойство Text для TextBox не нужно сохранять в ViewState, поскольку оно будет отображаться на странице и отправляться обратно с данными публикации.
Если вы посмотрите на реализацию TextBox
с Reflector, вы увидите, что у нее есть свойство SaveTextViewState
, которое определяет, нужно ли сохранять свойство Text в ViewState:
protected override object SaveViewState()
{
if (!this.SaveTextViewState)
{
// This means the Text property will not be saved to ViewState
this.ViewState.SetItemDirty("Text", false);
}
return base.SaveViewState();
}
В случаях, когда необходимо сохранение ViewState (например, TextBox невидим), SaveTextViewState
возвращает значение true, а свойство Text сохраняется в ViewState.
UPDATE
Согласно Reflector реализация свойства SaveTextViewState
(свойство, используемое для определения необходимости сохранения Text
в ViewState) выглядит следующим образом:
private bool SaveTextViewState
{
get
{
if (this.TextMode == TextBoxMode.Password) return false;
}
if (((base.Events[EventTextChanged] == null) &&
base.IsEnabled) &&
((this.Visible && !this.ReadOnly) &&
(base.GetType() == typeof(TextBox))))
{
return false;
}
return true;
}
}
т.е. Text
сохраняется в ViewState, если это не текстовое поле пароля и выполняется любое из следующих действий:
существует обработчик для события TextChanged (в этом случае ему требуется исходное значение, чтобы определить, изменился ли текст)
элемент управления отключен (в этом случае текст не будет отправлен обратно)
элемент управления не отображается (в этом случае он не будет отображен)
элемент управления только для чтения (текст не будет отправлен обратно)
тип элемента управления не TextBox
(не оптимизируйте, подавив ViewState, так как это может повлиять на реализацию производного элемента управления).
По сути, это оптимизация, которая подавляет ViewState, если она точно не нужна.