Re[2]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 09:15
Оценка: 2 (1)
Здравствуйте, <Аноним>, Вы писали:

А>Скажите пожалуйста, что за такие состояния у серверных контролов хранит в себе ViewState...не нашёл я нужного ответа на этом форуме, а чтоб понять зачем нужен ViewState ответьте на след вопросы:


А>1. Пользователь в браузере заполняет элемент TextEdit после чего выполняет Post на сервер. На сервере элемент TextEdit в каком событии инициализирует своё свойство Text? в событиии Init?

TextBox реализует интерфейс IPostBackDataHandler. В методе GetPostData он загружает свой текст из данных запроса.

А>2. Как заполняется свойтво Text из ViewState или из Request?

У инпутов все, что посылается на сервер берется из реквеста

А>Если из Request, то нафиг нужен ViewState??

Для вещей, которые на сервер не постятся

А> Если из ViewState, то как значение туда попало?

Записалось на сервере. Пример: при первом обращении к странице mypage.aspx контролу Label был назначен красный цвет букв и текст "Ура, товарищи!". После чего страница отрендерилась в html (в том числе сформировался вьюстейт в который записался цвет шрифта у Label и текст у Label), ушла на клиента и прекратила свое существование. Клиент в браузере нажал на кнопку "Хочу отослать данные на сервер". Происходит постбэк, заново создается страница и контролы на ней. Как сервер узнает, что лабел красный и там написано "Ура, товарищи!"? Правильно, он читает вьюстейт и в соответствии с ним выставляет параметры у лэйбла.

А>на клиенте записалось в скрытое поле??

Нет.

А> но ведь нет ни одной js функции, которая бы записывала во viewstate что-то

Правильно, и не должно быть.
Ph'nglui mglw'nafh Cthulhu R'lyeh wagn'nagl fhtagn
Eugene Agafonov on the .NET

Re[4]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 09:33
Оценка: 1 (1)
Здравствуйте, демиург, Вы писали:

Д>а вот тут не согласен, эта информация хранится во ViewState

Несогласие — ваше право. Однако в данном случае оно почти расходится с истиной. Почти — потому что значение из реквеста перезаписывает значение во вьюстейте.
bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
{
      string text1 = this.Text;
      string text2 = postCollection[postDataKey];
      if (!text1.Equals(text2))
      {
            this.Text = text2;
            return true;
      }
      return false;
}
 
[Bindable(true), WebCategory("Appearance"), DefaultValue(""), WebSysDescription("TextBox_Text"), PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
public virtual string Text
{
      get
      {
            string text1 = (string) this.ViewState["Text"];
            if (text1 != null)
            {
                  return text1;
            }
            return string.Empty;
      }
      set
      {
            this.ViewState["Text"] = value;
      }
}
Кто людям помогает, тот тратит время зря. Хорошими делами прославиться нельзя!
Eugene Agafonov on the .NET

Re[3]: несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 09:18
Оценка: +1
За то, что ты здесь хочешь, люди деньги платят, ходят на курсы, покупают книги. А ТЫ хочешь, что бы тебе не только показали где почитать. Но и разжевали и в рот положили.
Следующий вопрос, наверное, будет:
"Люди мне сказали сделать сайт, как это сделать, напишите за меня, где скачать исходники, ну что вам в лом мне помочь".
Так дела не делаются.
Хочешь рубку съесть и на "попу" сесть.
Тебе уже 3 человек написали, где про твою проблему почитать можно. Так тебе мало...
Не слушайте рекомендаций программиста. Никогда. Всё равно не поймете


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[6]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 09:22
Оценка: -1
Здравствуйте, Аноним, Вы писали:


Д>>ViewState на странице представляет собой hidden-поле... Вот asp.net сами в него пишут и сами читают... Что конкретно непонятно?


А>вы не внимательно читаете мой топик.

А>я задал конкретные вопросы:

А>1. Пользователь в браузере заполняет элемент TextEdit после чего выполняет Post на сервер. На сервере элемент TextEdit в каком событии инициализирует своё свойство Text? в событиии Init?


А>2. Как заполняется свойтво Text из ViewState или из Request?


ок. отвечаю подробнее...

1. Заполнение происходит при рендере страницы.

2. из ViewState.

проще будет сначала прочесть http://msdn2.microsoft.com/en-us/library/ms178197.aspx, и уж если совсем непонятно, тогда будем думать вместе
несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 05:53
Оценка:
Я новичек
1. Что происходит в методе init при загрузке страницы?
2. Зачем ViewState передается клиенту? Что в нем сохраняется? Когда пользователь заполняет контрол эти данные на сервере получаются через ViewState? т.е. ViewState где формируется на клиенте или сервере? как данные попадают во ViewState?
Re: несколько вопросов по asp.net
От: Nikolay_Ch Россия  
Дата: 27.01.06 06:07
Оценка:
А>1. Что происходит в методе init при загрузке страницы?
А>2. Зачем ViewState передается клиенту? Что в нем сохраняется? Когда пользователь заполняет контрол эти данные на сервере получаются через ViewState? т.е. ViewState где формируется на клиенте или сервере? как данные попадают во ViewState?
В основном на твои вопросы ответит MS
Re[2]: несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 06:24
Оценка:
N_C>В основном на твои вопросы ответит MS

ух ты...ваша идея нова и оригинальна. вопрос задан не снобам, а людям которые не поленятся ответить
Re[2]: несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 06:30
Оценка:
Данные ответы легко получить, прочитав любую из статей находящихся на этом сервере, которая посвящена ASP.
Не потрудитесь ли ВЫ, и удосужитесь прочитать данные статьи и не называть снобами тех, кому просто лень отвечать на вопросы «а почему каждое утро солнце встает, а зачем оно это делает»
Не слушайте рекомендаций программиста. Никогда. Всё равно не поймете


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: несколько вопросов по asp.net
От: Nikolay_Ch Россия  
Дата: 27.01.06 06:33
Оценка:
А>ух ты...ваша идея нова и оригинальна. вопрос задан не снобам, а людям которые не поленятся ответить
Хм... Вы думаете, что люди должны отрываться от работы и писать то, что уже написано, а кто-то поленился просто это прочитать?
По-первому вопросу советую прочитать раздел Page Lifecycle, по-второму — раздел, посвященный работе ViewState...
Re[3]: несколько вопросов по asp.net
От: egaron http://127.0.0.1
Дата: 27.01.06 06:38
Оценка:
Здравствуйте, C...R...a...S...H, Вы писали:

CRA>Данные ответы легко получить, прочитав любую из статей находящихся на этом сервере, которая посвящена ASP.

CRA>Не потрудитесь ли ВЫ, и удосужитесь прочитать данные статьи и не называть снобами тех, кому просто лень отвечать на вопросы «а почему каждое утро солнце встает, а зачем оно это делает»

CRA>
данное сообщение получено с www.gotdotnet.ru

CRA>ссылка на оригинальное сообщение



Неправы вы. Сколько проблем из-за того, что порой некому доступно объяснить ЗАЧЕМ СОЛНЦЕ ВСТАЕТ И ПОЧЕМУ ОНО ЭТО ДЕЛАЕТ. Или если вы направите человека для этого в обсерваторию или посоветуете ему прочитать профессиональную астрономическую литературу, он навряд ли че поймет.
Re: несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 08:49
Оценка:
Скажите пожалуйста, что за такие состояния у серверных контролов хранит в себе ViewState...не нашёл я нужного ответа на этом форуме, а чтоб понять зачем нужен ViewState ответьте на след вопросы:
1. Пользователь в браузере заполняет элемент TextEdit после чего выполняет Post на сервер. На сервере элемент TextEdit в каком событии инициализирует своё свойство Text? в событиии Init?
2. Как заполняется свойтво Text из ViewState или из Request?

Если из Request, то нафиг нужен ViewState?? Если из ViewState, то как значение туда попало? на клиенте записалось в скрытое поле?? но ведь нет ни одной js функции, которая бы записывала во viewstate что-то
Re[2]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 09:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скажите пожалуйста, что за такие состояния у серверных контролов хранит в себе ViewState...не нашёл я нужного ответа на этом форуме, а чтоб понять зачем нужен ViewState ответьте на след вопросы:

А>1. Пользователь в браузере заполняет элемент TextEdit после чего выполняет Post на сервер. На сервере элемент TextEdit в каком событии инициализирует своё свойство Text? в событиии Init?
А>2. Как заполняется свойтво Text из ViewState или из Request?

А>Если из Request, то нафиг нужен ViewState?? Если из ViewState, то как значение туда попало? на клиенте записалось в скрытое поле?? но ведь нет ни одной js функции, которая бы записывала во viewstate что-то



ASP c рулят заполнением viewstate(для стандартных контролов конечно), и сами Вы скорее всего не состоянии повлиять на этот процесс(можно только полностью отключить ) Таким образом и значение инициализируется без Вашего участия.
Re[3]: несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 09:04
Оценка:
Д> ASP c рулят заполнением viewstate(для стандартных контролов конечно), и сами Вы скорее всего не состоянии повлиять на этот процесс(можно только полностью отключить ) Таким образом и значение инициализируется без Вашего участия.

я понимаю, что они рулят, но мне надо понять как именно они это делают ((( и никто сказать толком не может все отправляют на четыре буквы
Re[4]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 09:13
Оценка:
Здравствуйте, Аноним, Вы писали:

Д>> ASP c рулят заполнением viewstate(для стандартных контролов конечно), и сами Вы скорее всего не состоянии повлиять на этот процесс(можно только полностью отключить ) Таким образом и значение инициализируется без Вашего участия.


А>я понимаю, что они рулят, но мне надо понять как именно они это делают ((( и никто сказать толком не может все отправляют на четыре буквы


ViewState на странице представляет собой hidden-поле... Вот asp.net сами в него пишут и сами читают... Что конкретно непонятно?
Re[5]: несколько вопросов по asp.net
От: Аноним  
Дата: 27.01.06 09:16
Оценка:
Д>ViewState на странице представляет собой hidden-поле... Вот asp.net сами в него пишут и сами читают... Что конкретно непонятно?

вы не внимательно читаете мой топик.
я задал конкретные вопросы:

1. Пользователь в браузере заполняет элемент TextEdit после чего выполняет Post на сервер. На сервере элемент TextEdit в каком событии инициализирует своё свойство Text? в событиии Init?

2. Как заполняется свойтво Text из ViewState или из Request?
Re[6]: несколько вопросов по asp.net
От: Nikolay_Ch Россия  
Дата: 27.01.06 09:18
Оценка:
А>1. Пользователь в браузере заполняет элемент TextEdit после чего выполняет Post на сервер. На сервере элемент TextEdit в каком событии инициализирует своё свойство Text? в событиии Init?
Инициализируется в LoadViewState...

А>2. Как заполняется свойтво Text из ViewState или из Request?

Сначала из ViewState в LoadViewState, а потом из Form в в LoadPostBackData
Re[3]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 09:30
Оценка:
Здравствуйте, Gollum, Вы писали:

А>>2. Как заполняется свойтво Text из ViewState или из Request?

G>У инпутов все, что посылается на сервер берется из реквеста

а вот тут не согласен, эта информация хранится во ViewState
Re[5]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 09:41
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, демиург, Вы писали:


Д>>а вот тут не согласен, эта информация хранится во ViewState

G>Несогласие — ваше право. Однако в данном случае оно почти расходится с истиной. Почти — потому что значение из реквеста перезаписывает значение во вьюстейте.
G>
G>bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
G>{
G>      string text1 = this.Text;
G>      string text2 = postCollection[postDataKey];
G>      if (!text1.Equals(text2))
G>      {
G>            this.Text = text2;
G>            return true;
G>      }
G>      return false;
G>}
 
G>[Bindable(true), WebCategory("Appearance"), DefaultValue(""), WebSysDescription("TextBox_Text"), PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
G>public virtual string Text
G>{
G>      get
G>      {
G>            string text1 = (string) this.ViewState["Text"];
G>            if (text1 != null)
G>            {
G>                  return text1;
G>            }
G>            return string.Empty;
G>      }
G>      set
G>      {
G>            this.ViewState["Text"] = value;
G>      }
G>}
G>


ок. Рефлектор рулит. Тока очень интересно, где тут реквест пользуется и где переписывается ViewState?
Re[6]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 09:47
Оценка:
Здравствуйте, демиург, Вы писали:

Д>ок. Рефлектор рулит. Тока очень интересно, где тут реквест пользуется

// см. MSDN про этот интерфейс
bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)


Д>и где переписывается ViewState?

if (!text1.Equals(text2))
{
    this.Text = text2; // Text - это свойство из предыдущего листинга
    return true;
}
Декадентство — это лежать на пляже у Великого Блинского болота и смотреть телевизор. В смокингах.
Eugene Agafonov on the .NET

Re[7]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 09:54
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, демиург, Вы писали:


Д>>ок. Рефлектор рулит. Тока очень интересно, где тут реквест пользуется

G>
G>// см. MSDN про этот интерфейс
G>bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
G>


Вот с этого места поподробнее... Каким образом postCollection связана с реквестом?

Д>>и где переписывается ViewState?

G>
G>if (!text1.Equals(text2))
G>{
G>    this.Text = text2; // Text - это свойство из предыдущего листинга
G>    return true;
G>}
G>


Ну это уж я разошелся звиняйте
Re[8]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 10:00
Оценка:
Здравствуйте, демиург, Вы писали:

Д>Вот с этого места поподробнее... Каким образом postCollection связана с реквестом?


Хм. А можно узнать, по-вашему с чем оно связано?

Вот тут все написано: IPostBackDataHandler
Даже пример есть.
В мире что-то не так? Или это у меня в голове?
Eugene Agafonov on the .NET

Re[9]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 10:08
Оценка:
Здравствуйте, Gollum, Вы писали:

Д>>Вот с этого места поподробнее... Каким образом postCollection связана с реквестом?


G>Хм. А можно узнать, по-вашему с чем оно связано?


Вот я и пытаюсь выяснить... Вы породили во мне сомнения , а msdn как-то не вдается в подробности. Мне, например, непонятно, как данные попадают в postCollection.
Re[10]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 10:15
Оценка:
Здравствуйте, демиург, Вы писали:

Д>Вот я и пытаюсь выяснить... Вы породили во мне сомнения , а msdn как-то не вдается в подробности.

Как же не вдается Там есть ссылка — For more information see Processing Postback Data.

Переходим по ссылке и видим

Upon postback, the page framework searches the posted content for values that match the UniqueIDs of server controls that implement IPostBackDataHandler. It then sequentially invokes LoadPostData on each control that implements this interface. The two arguments of LoadPostData are: a key that identifies the control and a collection, NameValueCollection, that contains the posted data. LoadPostData is typically implemented to update the state of a control as a result of the postback.


Д> Мне, например, непонятно, как данные попадают в postCollection.

Где-то в недрах среды ASP.NET. Можно поискать в рефлекторе если охота.
В мире что-то не так? Или это у меня в голове?
Eugene Agafonov on the .NET

Re[11]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 10:25
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, демиург, Вы писали:


Д>>Вот я и пытаюсь выяснить... Вы породили во мне сомнения , а msdn как-то не вдается в подробности.

G>Как же не вдается Там есть ссылка — For more information see Processing Postback Data.

G>Переходим по ссылке и видим


G>

G>Upon postback, the page framework searches the posted content for values that match the UniqueIDs of server controls that implement IPostBackDataHandler. It then sequentially invokes LoadPostData on each control that implements this interface. The two arguments of LoadPostData are: a key that identifies the control and a collection, NameValueCollection, that contains the posted data. LoadPostData is typically implemented to update the state of a control as a result of the postback.


Да видел я это... Это разве ж подробности?

Д>> Мне, например, непонятно, как данные попадают в postCollection.

G>Где-то в недрах среды ASP.NET. Можно поискать в рефлекторе если охота.

Да вот и ищу...
Re[12]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 10:45
Оценка:
Здравствуйте, демиург, Вы писали:

Д>Да вот и ищу...


А зачем?
Кто людям помогает, тот тратит время зря. Хорошими делами прославиться нельзя!
Eugene Agafonov on the .NET

Re[13]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 10:55
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, демиург, Вы писали:


Д>>Да вот и ищу...


G>А зачем?


Хороший вопрос! Из чистого любопытства скорее всего. Я признаю, что ошибся, наверно из-за того, что не вдавался в детали, а теперь хочу быть уверенным. Вот..

ЗЫ. Пока поиски ни к чему не привели
Re[14]: несколько вопросов по asp.net
От: Gollum Россия  
Дата: 27.01.06 11:04
Оценка:
Здравствуйте, демиург, Вы писали:


Д>Хороший вопрос! Из чистого любопытства скорее всего. Я признаю, что ошибся, наверно из-за того, что не вдавался в детали, а теперь хочу быть уверенным. Вот..

Да ладно, не ошибается тот кто ничего не делает. Ну MSDN обычно доверять можно, если только глазами не наблюдается обратных эффектов. Вот например обратный случай:
Пример из MSDN:

if(!this.IsStartupScriptRegistered("Startup"))
         this.RegisterStartupScript("Startup", scriptString);


При этом смотрим рефлектором:

public virtual void RegisterStartupScript(string key, string script)
{
      this.RegisterScriptBlock(key, script, ref this._registeredClientStartupScripts);
}

private void RegisterScriptBlock(string key, string script, ref IDictionary scriptBlocks)
{
      if (scriptBlocks == null)
      {
            scriptBlocks = new HybridDictionary();
      }
      if (!scriptBlocks.Contains(key))
      {
            scriptBlocks.Add(key, script);
      }
}


т.е. проверка абсолюно лишняя. Но все используют, т.к. в MSDN так написано.

Д>ЗЫ. Пока поиски ни к чему не привели

Ну просто если была бы какая-то интересная причина, я может бы слазил рефлектором. Но в MSDN вроде все написано как работает, поэтому и неинтересно.
And please don't stick Thy servants, Lord, in a Rotissomat.
Eugene Agafonov on the .NET

Re[12]: несколько вопросов по asp.net
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.01.06 11:09
Оценка:
Здравствуйте, демиург, Вы писали:

Д>Да вот и ищу...

А че там искать? 10 секунд. Ты Analyser в нем не пробовал использовать?

Page передает в хэндлеры свое поле _requestValueCollection.
запролняется эта _requestValueCollection в методе ProcessRequestMain, обращением к методу GetCollectionBasedOnMethod():
    if (this._request.HttpVerb == HttpVerb.POST)
      {
            if (!dontReturnNull && !this._request.HasForm)
            {
                  return null;
            }
            return this._request.Form;
      }
      if (!dontReturnNull && !this._request.HasQueryString)
      {
            return null;
      }
      return this._request.QueryString;

Чего, в общем-то, можно было ожидать.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 13:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, демиург, Вы писали:


Д>>Да вот и ищу...

S>А че там искать? 10 секунд. Ты Analyser в нем не пробовал использовать?

S>Page передает в хэндлеры свое поле _requestValueCollection.

S>запролняется эта _requestValueCollection в методе ProcessRequestMain, обращением к методу GetCollectionBasedOnMethod():
S>
S>    if (this._request.HttpVerb == HttpVerb.POST)
S>      {
S>            if (!dontReturnNull && !this._request.HasForm)
S>            {
S>                  return null;
S>            }
S>            return this._request.Form;
S>      }
S>      if (!dontReturnNull && !this._request.HasQueryString)
S>      {
S>            return null;
S>      }
S>      return this._request.QueryString;
S>

S>Чего, в общем-то, можно было ожидать.

Пасиба, развеяли вы мои сомнения!
Re[15]: несколько вопросов по asp.net
От: демиург Россия  
Дата: 27.01.06 14:03
Оценка:
Здравствуйте, Gollum, Вы писали:

G>т.е. проверка абсолюно лишняя. Но все используют, т.к. в MSDN так написано.


Забавно, что я тож на это поймался А вообще, лично мной было обнаружено в .net несколько странностей, особенно, при разработке контролов, так что ничего удивительного

Д>>ЗЫ. Пока поиски ни к чему не привели

G>Ну просто если была бы какая-то интересная причина, я может бы слазил рефлектором. Но в MSDN вроде все написано как работает, поэтому и неинтересно.

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