2010-06-01 2 views
4

Я как-то ответил на свой вопрос, я думаю, но я хочу убедиться, что правильно понимаю. Первоначально я думал, что когда пользователь предоставил значения в форме, то при обратной передаче значения были отправлены как часть ViewState, потому что TextBox.Text является частью представления. Теперь я обнаружил, что введенные пользователем значения фактически не применяются к элементам управления до тех пор, пока не произойдет событие OnLoad. Это смутило меня, потому что я думал, что viewstate был загружен в элементы управления до OnLoad (или при вызове Controls.Add()). Я несколько раз пересматриваю документацию на странице и управляю жизненными циклами, и теперь я понимаю, что был другой шаг для обработки данных обратной передачи (этот шаг не появлялся во многих документах :(Viewstate vs Postback

1) Таким образом, данные обратной передачи, значения типа пользователя в полях, применяются после события OnLoad, а данные Viewstate применяются непосредственно перед событием OnLoad?

2) Таким образом, по существу, все это означает, что при обратной передаче сервер получает два значения для свойства TextBox.Text, то есть в Viewstate, которое похоже на «старое» значение из предыдущего запроса и новое значение, предоставленное пользователем в форме?

3) Использует ли .net framework данные обратной передачи, такие же, как Viewstate, тем, что находит соответствующий элемент управления через свой ID-свойство? Это важно, потому что я создаю элементы управления динамически, и у меня могут быть даже формы, которые меняют структуру сверхурочных и должны думать о том, как я обрабатываю идентификаторы. До сих пор я не устанавливал свойство ID, и все работает нормально, но в будущем это может быть сложнее.

4) Имеет ли данные в viewstate когда-либо изменяться вообще на стороне клиента? Или представляет собой представление, идентичное тому, что было отправлено сервером в предыдущем запросе (если не было никакого вмешательства)? Ранее мое впечатление заключалось в том, что сервер закодировал все свойства управления в представлении, а на стороне клиента, когда пользователь представил форму, поле viewstate было декодировано, изменено, закодировано и отправлено на сервер с изменениями. Я предположил, что есть куча javascript, который делает все это для меня. Теперь я думаю, что все было неправильно. Вместо этого кажется, что Viewstate никогда не изменяется на стороне клиента, и все изменения клиента находятся в данных обратной передачи, так что следующий запрос сервер загружает viewstate, загружает обратную передачу и предоставляет новое обновленное viewstate в следующем ответе?

ответ

12

1) Оба загружен до Load
2) В принципе, да
3) ViewState наносят первый, а затем разместить данные

По словам Скотта Митчелла (смотри ниже)

динамически добавлены элементы управления должны быть , программно добавленные на веб-страницу на каждом посещении страницы. Самое лучшее время для добавления этих элементов управления - во время этап инициализации страницы жизненного цикла, который происходит до этапа состояния просмотра нагрузки . То есть мы хотим иметь иерархию управления до состояния состояния загрузки этап приходит. По этой причине лучше всего создать обработчик события для события Init класса страницы в вашем классе кода и добавить туда динамические элементы управления.

4) Если вы ничего не делаете вне коробки, ViewState никогда не изменяется на стороне клиента. «ViewState» - это поле формы HTML и обрабатывается на стороне сервера.

Вот несколько изображений от Understanding ASP.NET View State от Scott Mitchell, которые могут вам помочь.

alt text http://i.msdn.microsoft.com/ms972976.viewstate_fig02%28en-us,MSDN.10%29.gif alt text http://i.msdn.microsoft.com/ms972976.viewstate_fig04%28en-us,MSDN.10%29.gif

Bonus Чтение Материал: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

+0

я получил только через около 10% от «Bonus чтива» ссылка и до сих пор это действительно большая информация. Еще раз спасибо! – AaronLS

+0

Я прочитал статью Truly Understanding Viewstate около 5 раз и всегда возвращаюсь к ней, когда я чувствую смущение. :) – Greg

0

Мое впечатление Раньше считалось, что сервер закодированы все контрольные свойства в ViewState, так и на стороне клиента, когда пользователь представил форма, поле viewstate было декодировано, изменено, закодировано и отправлено на сервер с изменениями.

Нет, точка ViewState просто сохранить состояние страницы с последней «Сохранить вид государственного» страницу события, то есть, что событие происходит незадолго до того, как страница отображается на клиенте.

Когда клиент делает выбор в раскрывающемся списке или меняет текст в текстовом поле, скрытое свойство ViewState, которое существует на клиентской странице в качестве статического тега HTML, не динамически меняет/не кодирует эти значения, оно остается таким же, как и когда страница была первоначально отображена.

Итак, как сохраняется новое состояние страницы, то есть как выпадающие списки пользователей и значения текстового поля сохраняются в элементах управления ASP? Эти выпадающие списки и значения текстового поля записываются в данные Post Back.

A server control can indicate that it is interested in examining the posted back data by implementing the IPostBackDataHandler interface. In this stage in the page life cycle, the Page class enumerates the posted back form fields, and searches for the corresponding server control. If it finds the control, it checks to see if the control implements the IPostBackDataHandler interface. If it does, it hands off the appropriate postback data to the server control by calling the control's LoadPostData() method. The server control would then update its state based on this postback data. 

- Скотт Митчелл

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