1

最初のbuttonクリックで強調表示する があります。2回目のクリックで、同じ色にリセットされます。を使用して、強調表示されているかどうかを判断しています。ボタンが強調表示されていますが、どういうわけか元の色にリセットされていません。どんな助けでも大歓迎です。boolean isSelected

私はisSelectedを次のようにデカールしていますprivate bool isSelected = false;

ボタン イベント ハンドラ

protected void Button2_Click(object sender, EventArgs e)
    {
        if (!isSelected)
        {
            isSelected = true;
            Styles.buttonHighlight(Button2);
        }
        else
        {
            isSelected = false;
            Styles.buttonReset(Button2);
        }
    }  

スタイリング方法

public static void buttonHighlight(Button button)
    {
        button.BackColor = Color.Blue;
        button.ForeColor = Color.White;
    }
    public static void buttonReset(Button button)
    {
        button.BackColor = ColorTranslator.FromHtml("#ffffff");
        button.ForeColor = ColorTranslator.FromHtml("#848484");
    }
4

2 に答える 2

1

ポストバック間で変数の状態を保存しようとしています...これはあなたが考えるほど単純ではありません...
あなたの場合、IsSelected = true次のポストバック(次にボタンがクリックされたとき)でまだ設定しています変数はポストバックごとに再宣言されるため、false に戻ります (falseこの場合は元の値になります)。Asp.Net は基本的にステートレスです。

IsSelected をSessionまたはViewStateに保存するか、隠しフィールドとして保存することで、これを解決できます...

私は ViewState があなたのニーズに十分であるべきだと思います...

protected void Button2_Click(object sender, EventArgs e)
{
    bool selected = false;

    if (ViewState["IsSelected"] != null)
    {
       selected = (bool) ViewState["IsSelected"];
    }

    if (!selected)
    {
        ViewState["IsSelected"] = true;
        Styles.buttonHighlight(Button2);
    }
    else
    {
        ViewState["IsSelected"] = false;
        Styles.buttonReset(Button2);
    }
}  

セッションの使用はまったく同じで、上記のコードを に変更ViewStateするだけです。Sessionそれらの違いについて少し読んで(リンクを追加しました)、ニーズに最も適したものを確認してください。

于 2013-02-20T00:41:24.880 に答える