2013-04-12 4 views
1

У меня возникла проблема с сохранением сеанса для DropDownList, который должен работать на нескольких страницах. Это код, у меня есть для этого прямо сейчас:Раскрывающийся список не сохраняет данные на сеанс

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     ddlOffice.SelectedValue = Session("Office") 
End Sub 

И это код у меня есть для присвоения значения ...

Protected Sub ddlOffice_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlOffice.SelectedIndexChanged 
    Session("Office") = ddlOffice.SelectedItem.Value.ToString 
End Sub 

Я проверил с точки останова для последнего значения и его определенно прошел правильно - значение, переданное для параметра загрузки, было «2», что верно, но значение сеанса SelectedIndexChanged по умолчанию возвращает значение 1. Всегда. Любые указатели?

ответ

1

Регулирующие обработчики событий послеPage_Load событий. Так же обработчик события ddlOffice_SelectedIndexChanged. Код ddlOffice.SelectedValue = Session("Office") запустился в фазе Page_Load, и тогда сессия имеет старое значение. Для работы этого Arround, изменить ddlOffice_SelectedIndexChanged следующим образом:

Protected Sub ddlOffice_SelectedIndexChanged(
     ByVal sender As Object, 
     ByVal e As EventArgs) Handles ddlOffice.SelectedIndexChanged 
    Session("Office") = ddlOffice.SelectedItem.Value.ToString 
    ddlOffice.SelectedValue = ddlOffice.SelectedItem.Value.ToString 
End Sub 

, а также добавить проверку в Page_Load события:

If Not Page.IsPostback 
    ddlOffice.SelectedValue = Session("Office") 

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

+0

Я могу быть настолько слепым иногда .... ничего себе. Спасибо миллиону Ивайло –

+0

@LordRelix, пожалуйста. Рад, что ваша проблема решена –

0

Вы, кажется, убеждены, что событие SelectedIndexChange является проблемой, но я думал, что я говорю об этом:

Если поставить эту строку на самом верху Page_Load, как вы показали:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     ddlOffice.SelectedValue = Session("Office") 
End Sub 

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

0

Переместите назначение для выбранного значения в событие DataBound для раскрывающегося списка и измените переменную сеанса на строку следующим образом:

ddlOffice.SelectedValue = (string)(Session("Office")) 
Смежные вопросы