1

我有一个在第一次点击button时突出显示的内容。在第二次单击时,它应该重置回相同的颜色。我正在使用 a来确定它是否突出显示。该按钮被突出显示,但不知何故它没有重置回原来的颜色。任何帮助,将不胜感激。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保存在SessionViewState中,甚至作为隐藏字段来解决这个问题......

我认为 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);
    }
}  

使用Session也是大同小异,只是在上面的代码中ViewState改成。Session您应该阅读一下它们之间的区别(我添加了链接),看看哪个最符合您的需求。

于 2013-02-20T00:41:24.880 回答
1

问题来了:isSelected永远都是假的。

关于 ASP.NET(以及一般的 Web 应用程序),您必须记住的一点是,一切都是无状态的。这基本上意味着为每个回发创建一个的页面类实例。并且由于isSelected是这个类中的一个变量,它也将被再次实例化并且其先前的值将不会被存储。

那么你如何解决这个问题呢?您存储isSelected某处的值。您可以使用 Session 变量(存储在服务器内存中),或者最好使用 ViewState 变量(存储在页面文本本身中)。您可以isSelected像这样使用 getter 和 setter 制作属性:

private bool isSelected
{
    get 
    {
        if(ViewState["isSelected"] != null && ViewState["isSelected"] is bool)
            return (bool)ViewState["isSelected"];
        else
            return false;
    }
    set
    {
        ViewState["isSelected"] = value;
    }

}

使用 ViewState 需要打开 ViewState,这是默认的。另一种可能性是将内容存储在isSelectedHidden Field 控件中(它也在后台使用 ViewState)。

于 2013-02-20T00:44:10.077 回答