проблема с listbox databind и postback
От: aero_777  
Дата: 10.07.03 12:23
Оценка:
hi all

загружаю динамически usercontrol, на котором находится wizard с панелями
на второй панели находится listbox и кнопка

порядок такой

1. на странице:
в Page.OnInit загружаю Control

2. в usercontrol-e
в Page_Load — загружаю данные
if (!Page.IsPostBack)
{
listbox.DataSource = ...;
listbox.DataBind();
}

в OnBubbleEvent Wizarda ловлю нажатие кновки и
вызываю валидацию и если она прошла то делаю
смену текущей страницы визада то есть делаю панель видимой.

вот в принципе и все

ПРОБЛЕМА в том что все айтемы listbox-a пропадают на второй странице.
Причем пропадают только в том случае если они добавлены ручками, если же я их объявляю
в ascx файле, то все замечательно работает.

такое ощущения что пропадает или не работает ViewState, но он включен.
Re: проблема с listbox databind и postback
От: hellraiser Беларусь  
Дата: 10.07.03 12:38
Оценка:
Здравствуйте, aero_777, Вы писали:

_>hi all


_>загружаю динамически usercontrol, на котором находится wizard с панелями

_>на второй панели находится listbox и кнопка

_>порядок такой


_>1. на странице:

_>в Page.OnInit загружаю Control

_>2. в usercontrol-e

_>в Page_Load — загружаю данные
_>if (!Page.IsPostBack)
_>{
_> listbox.DataSource = ...;
_> listbox.DataBind();
_>}

_>в OnBubbleEvent Wizarda ловлю нажатие кновки и

_>вызываю валидацию и если она прошла то делаю
_>смену текущей страницы визада то есть делаю панель видимой.

_>вот в принципе и все


_>ПРОБЛЕМА в том что все айтемы listbox-a пропадают на второй странице.

_>Причем пропадают только в том случае если они добавлены ручками, если же я их объявляю
_>в ascx файле, то все замечательно работает.

_>такое ощущения что пропадает или не работает ViewState, но он включен.


насколько я знаю, Control нужно загружать только в Page_Load
Re[2]: проблема с listbox databind и postback
От: aero_777  
Дата: 10.07.03 13:09
Оценка:
Здравствуйте, hellraiser, Вы писали:

H>Здравствуйте, aero_777, Вы писали:



H>насколько я знаю, Control нужно загружать только в Page_Load


я видел примеры в MSDN где Control загружается и в PageInit
но это не суть важно — при загрузке в PageLoad, увы, ситуация такая же
Re: проблема с listbox databind и postback
От: uzzy Россия  
Дата: 11.07.03 03:02
Оценка:
Здравствуйте, aero_777, Вы писали:

_>ПРОБЛЕМА в том что все айтемы listbox-a пропадают на второй странице.

_>Причем пропадают только в том случае если они добавлены ручками, если же я их объявляю
_>в ascx файле, то все замечательно работает.

_>такое ощущения что пропадает или не работает ViewState, но он включен.


Ты ручками где добавляешь? на сервере или на клиенте?
Если на сервере, то до сохранения ViewState или после?
Если на клиенте — сохраняй инфу о листбоксе в отдельном hidden поле
Re[2]: проблема с listbox databind и postback
От: aero_777  
Дата: 11.07.03 07:09
Оценка:
Здравствуйте, uzzy, Вы писали:

U>Здравствуйте, aero_777, Вы писали:


_>>ПРОБЛЕМА в том что все айтемы listbox-a пропадают на второй странице.

_>>Причем пропадают только в том случае если они добавлены ручками, если же я их объявляю
_>>в ascx файле, то все замечательно работает.

_>>такое ощущения что пропадает или не работает ViewState, но он включен.


U>Ты ручками где добавляешь? на сервере или на клиенте?

U>Если на сервере, то до сохранения ViewState или после?
U>Если на клиенте — сохраняй инфу о листбоксе в отдельном hidden поле

ручками на сервере, до сохранения ViewState, в Page_Load user control-а
Re: TemplatedControl и ViewState was: проблема с listbox dat
От: aero_777  
Дата: 11.07.03 17:44
Оценка:
Здравствуйте, aero_777, Вы писали:

_>ПРОБЛЕМА в том что все айтемы listbox-a пропадают на второй странице.

_>Причем пропадают только в том случае если они добавлены ручками, если же я их объявляю
_>в ascx файле, то все замечательно работает.

_>такое ощущения что пропадает или не работает ViewState, но он включен.



сорри за первое название темы
залез поглубже так вот если листбокс разместить не в визарде, а на самом usercontrol-то все работает
скорее всего проблема в самописном визарде

это наследник WebCOntrol, который может иметь страницы наследники Placeholder-a

по памяти код такой


[ParseChildren(true,"Pages")]
public class Wizard: WebControl, INamingContainer
{
   private ArrayList pageData = new ArrayList()
   public IList Pages {
      get { return pageData; }
   }

   public void override CreateChildControls {
      foreach (WizardPage ctl in pageData) {
          Controls.Add(ctl)   
      } 
   }

   protected override void OnBubbleEvent{
        прячем/показываем нужные страницы 
   }
}


public class WizardPage: Placeholder
{
}


.ascx
<my:wizard runat="server">
<my:wizardpage runat="server"> 
... some content
<asp:button commandname="next"/>
</my:wizardpage>
<my:wizardpage runat="server"> 
<asp:listbox runat="server" id="someid"/>
... some content
<asp:button commandname="next"/>
</my:wizardpage>
<my:wizardpage runat="server"> 
... some content
</my:wizardpage>
<my:wizardpage runat="server"> 
... some content
</my:wizardpage>
</my:wizard>


симптомы следующие — на второй странице из list-box исчезают данные
подскажите, плиз, что я мог пропустить при написании контрола так что теряется/не отрабатывает viewstate

статьи в MSDN Creatiпg Custom/Templated Controls читал.
Re: проблема с listbox databind и postback
От: aero_777  
Дата: 16.07.03 14:11
Оценка: 6 (1)
Здравствуйте, aero_777, Вы писали:

_>hi all


_>ПРОБЛЕМА в том что все айтемы listbox-a пропадают на второй странице.

_>Причем пропадают только в том случае если они добавлены ручками, если же я их объявляю
_>в ascx файле, то все замечательно работает.

_>такое ощущения что пропадает или не работает ViewState, но он включен.


раскопал причину, вдруг кому поможет

CreateChildCOntrols моего визарда вызывалась где-то в районе PreRender,
соответственно никакой загрузки ViewState не было

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