1

2つのドロップダウンリストとボタンがあるページがあります。すべてのコントロールは更新パネルにあります。最初のドロップダウンリスト(ddl1)には、巨大なビューステートを引き起こした多くの値が含まれているため、ビューステートを無効にしました。ページoninitイベントでは、ページがポストバックされるたびにドロップダウンリストにデータを入力します。これはすべて正常に機能しているようです。すべての値が表示され、イベントハンドラーで選択した値にアクセスできます。

ddl1のautopostback属性はtrueに設定されているため、その値が変更されると、2番目のドロップダウンリスト(ddl2)に、ddl1での選択に依存するいくつかの値が入力されます。これも正常に機能します。ddl1で値を選択すると、ddl2の値が変わります。

ddl2ではビューステートが無効になっていません。2つのドロップダウンリストの下にあるボタンはデフォルトで無効になっており、ddl2の値がstring.empty以外に変更されると有効になります。これは私が問題にぶつかるところです。ddl2も自動ポストバックを実行しますが、選択したインデックス/値が失われるようです。ボタンを有効にするか無効にするかをコードで確認しているとき、選択されたインデックスは常に0であり、選択された値はstring.Emptyです。

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

4

1 に答える 1

1

選択した値が戻ってこないため(ViewStateがオフになっているため)、ポストバック中に実行されているコードがddl2をクリアしていると推測しています。しかし、いくつかのサンプルコードがなければ、確実に言うのは本当に難しいです。

于 2010-09-13T04:37:13.423 に答える