> Итак собственно вопросы (помогите утрясти информацию в систему):
> 1. Для чего нужен ViewStat.
для того, чтобы хранить состояние страницы между постбеками.
> 4. Почему если я загружаю в рантайме пользовательский контрол в методе Page_Load то у меня в пользовательском контроле на Page_Load-е свойства textbox-а не инициализированы, а если грузить пользовательский контрол в методе страницы OnInit — все нормально.
> 5. Почему вне зависимости от того где загружать пользовательский контрол при обработке сообщения TextBox TextBox1.TextChanged в обработчике уже находяться корректные данные. тоесть получаеться то что при pageLoad одно а в обработчике другое.
а вот тут давайте обсудим. Вот код из класса Page (покоцаный):
private void ProcessRequestMain()
{
try
{
this._requestValueCollection = this.DeterminePostBackMode();
HttpContext context1 = this.Context;
base.InitRecursive(null); //тут возникает событие Init
if (this.IsPostBack)
{
this.LoadPageViewState();
this.ProcessPostData(this._requestValueCollection, true); // тут обрабатываются данные, пришедшие в запросе
}
base.LoadRecursive(); // тут событие Load
if (this.IsPostBack)
{
this.ProcessPostData(this._leftoverPostData, false); // тут обрабатываются данные, пришедшие в запросе
this.RaiseChangedEvents(); // тут возникают события об изменившихся данных
this.RaisePostBackEvent(this._requestValueCollection);
}
base.PreRenderRecursiveInternal();
this.SavePageViewState();
base.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
}
catch ...
}
Итого имеем, что данные пришедшего запроса грузятся дважды: между Init и Load, а оставшиеся между Load и RaiseChangedEvents.
Теперь твоя ситуация. Ты в Load создаешь и добавляешь контрол, и сразу же требуешь от него данные. В нем пока данные из его ViewState'а (это происходит при добавлении контрола в коллекцию Controls). А пришедшие в запросе в него будут засунуты только после Load. Аналогично, если ты добавил контрол в Init'е, то они к Load'у в нем уже появятся. Вот собсно и все.
Posted via RSDN NNTP Server 1.9