Изменение ViewState клиентским скриптом
От: Sun_Original  
Дата: 09.10.03 07:52
Оценка:
Здравствуйте!

Задача:

Изменить свойство пользовательського элемента управления (Custom control)
клиентским скриптом. Я пытаюсь создать Tab-control (закладки) у которого
есть свойство SelectedIndex (номер выбраной закладки). Перемещаться между
закладками нужно на клиенте без PostBack'a. Но когда PostBack все же происходит
(Например после нажатия кнопки на одной из закладок) — конторл необходимо
прорисовать с учетем того какая закладка в тот момент была активной
(т.е необходимо изменить SelectedIndex property у моего TabControl)

Как лучше поступить в этом случае?

Я пытался на клиентt записывать значение SelectedIndex в HiddenField а на
сервере читать его при помощи Page.Request["..."] но толком ничего не вышло.

Заранее благодарен за помошь.
Re: Изменение ViewState клиентским скриптом
От: Gollum Россия  
Дата: 09.10.03 08:00
Оценка:
Здравствуйте, Sun_Original, Вы писали:

S_O>Как лучше поступить в этом случае?


Например, перед постбэком скриптом организовывать соотв. Event, хотя я бы поступил как написано ниже

S_O>Я пытался на клиентt записывать значение SelectedIndex в HiddenField а на

S_O>сервере читать его при помощи Page.Request["..."] но толком ничего не вышло.

А почему? По-моему, оптимальное решение.
В инфракрасный прицел мы видны, как небесный ОМОН
Eugene Agafonov on the .NET

Re: Изменение ViewState клиентским скриптом
От: mogadanez Чехия  
Дата: 09.10.03 08:36
Оценка:
Здравствуйте, Sun_Original, Вы писали:

S_O>Я пытался на клиентt записывать значение SelectedIndex в HiddenField а на

S_O>сервере читать его при помощи Page.Request["..."] но толком ничего не вышло.

Раскажи подробнее как делал, видимо есть ошибки, использование HiddenFieldHelper'ов — обычная практика
... << RSDN@Home 1.1 beta 2 >>
Re[2]: Изменение ViewState клиентским скриптом
От: Sun_Original  
Дата: 09.10.03 10:28
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Раскажи подробнее как делал, видимо есть ошибки, использование HiddenFieldHelper'ов — обычная практика



кусок кода:
public int SelectedIndex{
get{
object o=Page.Request["SelectedIndex"];
return(o==null?0:int.Parse(o.ToString()))
}
set{
Page.RegisterHiddenField("SelectedIndex",value);
}
}
Re[3]: Изменение ViewState клиентским скриптом
От: mogadanez Чехия  
Дата: 09.10.03 10:37
Оценка:
Здравствуйте, Sun_Original, Вы писали:

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


M>>Раскажи подробнее как делал, видимо есть ошибки, использование HiddenFieldHelper'ов — обычная практика



S_O>кусок кода:

S_O>
S_O>public int SelectedIndex{
S_O>get{
S_O>object o=Page.Request["SelectedIndex"];
S_O>return(o==null?0:int.Parse(o.ToString()))
S_O>}
S_O>set{
S_O>Page.RegisterHiddenField("SelectedIndex",value);
S_O>}
S_O>}
S_O>


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

P.S.
по твоему коду получается, что если на сервере изначально не установить SelectedIndex, то хелпер на клиента не попадет....
... << RSDN@Home 1.1 beta 2 >>
Re[4]: Изменение ViewState клиентским скриптом
От: Sun_Original  
Дата: 10.10.03 11:55
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>хм.... довольно странно... ну ладно...

M>это не все.. покажи для полной картины куски, в которых кладешь что либо в данное поле и считываешь в него....

M>P.S.

M>по твоему коду получается, что если на сервере изначально не установить SelectedIndex, то хелпер на клиента не попадет....


//Определение контрола 
public class Tab : Control,INamingContainer
{

...

public int SelectedIndex{
get{
object o=Page.Request["SelectedIndex"];
return(o==null?0:int.Parse(o.ToString()));
}
set{
Page.RegisterHiddenField("SelectedIndex",value);
}
}

....
//хелпер попадает на клиента в этом месте:

protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e);
Page.RegisterHiddenField("SelectedIndex",this.SelectedIndex.ToString());

}
}

Большое спасибо всем кто откликнулся — на самом деле все
корректно работает ...

Меня сбила с толку следующая ситуация:
Например — я нажимаю кнопку (System.Web.UI.WebControls.Button) расположенную
на второй закладке (SelectedIndex=1). В обработчике (GoToPage3) этого события (Click)
я пишу:


public void GoToPage3(object sender, EventArgs e){

//Tab1 - мой контрол (Tab Tab1=new Tab();)
Tab1.SelectedIndex=2; //переходим на третью закладку
}



по ходу по событию OnLoap я вывожу ТЕКУЩЕЕ состояние SelectedIndex контрола Tab1:


...
Page.Response.Write(String.Format("Page load - Selected index Tab1 is {0}",Tab1.SelectedIndex));
...



И сильно удивляюсь почему выводиться строка "Page load — Selected index Tab1 is 1".

Естественно что сначала вызывается обработчик события Load (а в это время
Tab1.SelectedIndex=1 так как PostBack пришел со второй закладки!) и
только после этого обрабатывается события нажатия кнопки (GoToPage3)
где и происходит изменение номера выбраной закладки.


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