LoadControl & ViewState чегото я не до понимаю
От: max314 Россия  
Дата: 28.04.05 06:06
Оценка:
hi, All!!!!

Предыстория:
Начал я писать простенькую реализацию MVC.
Контроллер должен грузить UserControl в главную страницу которая являеться шаблоном.
На методе Page_Load UserControl-а попытался считать/записать даные из модели наступил на грабли .
Результатом шишки на лбу стал тесторый проект.

Описание тестового проекта:
Есть UserControl1 сосотоящий из одного TextBox.
метод Page_Load ниже
        private void Page_Load(object sender, System.EventArgs e)
        {
            Response.Write(TextBox1.Text);
        }

Главная страница приложения содержит одну кнопку для поста,
UserControl1 вставленный в страницу в дизайн тайме и PlaceHolder для того
чтобы поместить туда Еще один экземпляр UserControla1 в рантайме.
Помещение контрола в рантайме происхрлдит в методе Page_Load главной страницы.
Вобщем то что прописал дохтур MSDN.
            Control c = LoadControl("WebUserControl1.ascx");
            c.ID = "Test";
            PlaceHolder1.Controls.Add(c);

Запускаемся. Первый постбак:
в результате на главной странице отображаеться только информация TextBox от юзер контрола
который был добавлен в среде в режиме дзайн тайма.
При повторном постбеке стало понятно что информация от созданного в рунтайм контрола запазывает на один постбак.
Покурил я немнога и сделал следующий финт ушами:
в юзер контроле навесил обработчик TextBox на изменение:
        private void TextCh(object sender, System.EventArgs e)
        {
            Response.Write("Event" + TextBox1.Text);
        }

При обработке этого сообщения для обоих юзер контролов textbox имеет "правильные"
с моей точки значения тоесть те что были введены (в не зависимости от повторности постбака).
методом научного тыка я выяснил то, что если код создания юзер контрола перенести из метода
страницы Page_Load в метод OnInit все начинает работать корректно .
начал я курить поиск на rsdn
надыбал http://www.rsdn.ru/Forum/?mid=551791
Автор: hellraiser
Дата: 26.02.04

долго читал многа думал .
покурил еще некоторое время http://www.15seconds.com/issue/020102.htm

отключил я в тестовом примере и для страницы и для юзерконтролов ViewState.
В HTML коде страницы поле VIEWSATE заметно сократилось но не исчезло совсем.
на функционировании примера практически ничего не изменилось.

Итак собственно вопросы (помогите утрясти информацию в систему):
1. Для чего нужен ViewStat.
2. Если я правильно понимаю и использую модель как хранилище данных
(на первой загрузке контрола считываю данные из модели на постбеке сохраняю в модель) мне ViewStat не нужен?
3. Почему если я отключил ViewState на странице и на контроле почему не исчезло поле name="__VIEWSTATE" из HTML кода страницы.
4. Почему если я загружаю в рантайме пользовательский контрол в методе Page_Load то у меня в пользовательском контроле на Page_Load-е свойства textbox-а не инициализированы, а если грузить пользовательский контрол в методе страницы OnInit — все нормально.
Кстати почему MSDN рекомендует грузить в Page_Load?
5. Почему вне зависимости от того где загружать пользовательский контрол при обработке сообщения TextBox TextBox1.TextChanged в обработчике уже находяться корректные данные. тоесть получаеться то что при pageLoad одно а в обработчике другое.

заранее спасибо за ответы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.