Отключение ViewState в раскрывающемся списке вызывает проблемы - PullRequest
1 голос
/ 13 сентября 2010

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

Для ddl1 атрибут autopostback имеет значение true, поэтому при изменении его значения второй раскрывающийся список (ddl2) заполняется некоторыми значениями, которые зависят от выбора в ddl1.Это также работает нормально, значения в ddl2 меняются, когда я выбираю значение в ddl1.

ddl2 не имеет отключенного состояния просмотра.Кнопка, которая находится под моими двумя выпадающими списками, по умолчанию отключена и становится активной, когда значение ddl2 изменяется на что угодно, кроме string.empty.Здесь я сталкиваюсь с проблемами.ddl2 тоже выполняет автоответчик, но он, похоже, теряет выбранный индекс / значение.Когда я в своем коде проверяю, включить или отключить кнопку, выбранный индекс всегда равен 0, а выбранное значение - строка. Пусто.

Если я включаю viewstate на ddl1, все это прекрасно работает.Кто-нибудь может указать мне, что я делаю неправильно?

Вот код, выполняемый постбэком ddl2:

protected void AvailableProgramsIndexChanged(object sender, EventArgs e)
{
   ToggleMoreInformationButton();
}

private void ToggleMoreInformationButton()
{
        if (Request.Browser.Type.Contains("IE"))
        {
            ToggleIE();
        }
        else
        {
            ToggleNonIE();
        }
}

private void ToggleIE()
{
        if (this.ddlAvailablePrograms.SelectedValue != string.Empty)
        {
            this.careerInfoLearnMoreSubmit.Enabled = true;
            this.careerInfoLearnMoreSubmit.CssClass = "submit nongreyed";
        }
        else
        {
            this.careerInfoLearnMoreSubmit.Enabled = false;
            this.careerInfoLearnMoreSubmit.CssClass = "submit greyed";
        }
    }

private void ToggleNonIE()
{
        if (this.ddlAvailablePrograms.SelectedValue != string.Empty)
        {
            this.careerInfoLearnMoreSubmit.Enabled = true;
            this.careerInfoLearnMoreSubmit.Style.Remove("opacity");
            this.careerInfoLearnMoreSubmit.Style.Add("opacity", "1.0;");
        }
        else
        {
            this.careerInfoLearnMoreSubmit.Enabled = false;
            this.careerInfoLearnMoreSubmit.Style.Remove("opacity");
            this.careerInfoLearnMoreSubmit.Style.Add("opacity", "0.5;");
        }
 }

Код вообще не изменяет выбранное значение ddl2.

Спасибо,
b3n

1 Ответ

1 голос
/ 13 сентября 2010

Я предполагаю, что код, выполняемый во время обратной передачи, очищает ddl2, потому что выбранное значение не возвращается (поскольку ViewState выключен).Но без некоторого примера кода это действительно трудно сказать наверняка.

...