веб-пользовательский контроль постоянных свойств (viewstate, session, context) Я что-то упустил - PullRequest
1 голос
/ 13 февраля 2012

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

Когда приходит время «использовать» свойство selected_date_time для элементов управления, я просто не могу его сохранить.Ничего .. Я исследовал и пытался бесконечно, используя viewsate, context и session.Сессия onbiouosly работает, но она грязная, и я использую две копии этого элемента управления (время начала и окончания), поэтому действительно необходимо взломать vars сессии, чтобы создать его работу.

Я что-то упустил?Элемент управления инициализируется каждый раз, когда что-то происходит, и, очевидно, теряет информацию о своем состоянии.Пользовательский интерфейс сохраняет свое состояние, так как я могу выбрать дату, записать эту дату в метку, и это сохраняется.Но когда я пытаюсь получить доступ к своим свойствам элемента управления для получения выбранных комбинированных даты и времени (это уже сохраняется визуально), это ничего не значит.Я отлаживаю, и он инициализируется каждый раз, когда я делаю какие-либо посты на странице.

Может кто-нибудь, пожалуйста, пролить свет на это для меня?Это действительно начинает становиться проблемой.

Заранее спасибо.

Пример: (простые компоненты)

UC _ save_method

ViewState("var_time") = "My veiwstate text"

форма_read_method

dim str as string = ViewState("var_time")

форма не видит ничего в var viewstate.

Я также пробовал ее с обычными свойствами и значениями, которые не работали, поэтому я перешел к просмотру var.для моих свойств.Сейчас я просто пытаюсь заставить представление работать даже без свойств.

Кажется, у моей формы и элемента управления должно быть два отдельных состояния просмотра?Я немного n00b в отношении состояний просмотра.

Спасибо

[решение] Вы должны явно сбросить свои свойства в методе prerender элемента управления.Мое недоразумение состояло в том, что страница и элемент управления совместно используют одно и то же состояние просмотра.Получается, что элемент управления и страница, на которой он работает, имеют свои собственные независимые состояния просмотра.

Таким образом, абсурдно, для вашей функции набора свойств в элементе управления установите свое значение в состоянии просмотра, и при предварительном отображении примите это значение состояния представления.и установите свойство get variable = - значение в viewstate.

Теперь вы можете получить доступ к свойству со своей страницы, как будто все в порядке, и мир не заканчивается ... pheww

Спасибо cnay за то, что направили меня.

'Usr control xyz</p> <p>Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender</p> <p>my_time = ViewState("var_time") 'my_time is the get variable for property date_time</p> <p>End Sub</p> <p>'page use</p> <p>xyz.date_time

1 Ответ

2 голосов
/ 13 февраля 2012

Возможно, вам следует опубликовать полный контрольный код, чтобы получить лучший ответ, но, говоря в общих чертах, состояние представления (или состояние управления) обычно является правильным подходом к сохранению состояния управления, такого как свойства.Каждый экземпляр управления получает различную сумку состояния обзора, и, следовательно, столкновения легко избежать.

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

Теперь для пользовательских элементов управления обычно вы можете использовать значения (или свойства) дочерних элементов управления для получения значения / свойств элемента управления, поэтому они могут не использовать состояние просмотра.Однако, если вы добавляете свойства / состояние, которые не являются резервными для дочерних элементов управления, возможно, вам придется создавать их резервные копии в состоянии просмотра.Допустим, у вашего пользовательского элемента управления есть два дочерних элемента управления - один для даты и другой для времени, после чего они могут объединить их значения, чтобы получить выбранное значение даты и времени для вашего элемента управления.

...