Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在第二次单击ASP.net时重置按钮颜色?_C#_Asp.net_Events - Fatal编程技术网

C# 如何在第二次单击ASP.net时重置按钮颜色?

C# 如何在第二次单击ASP.net时重置按钮颜色?,c#,asp.net,events,C#,Asp.net,Events,我有一个按钮,它在第一次单击时突出显示。在第二次单击时,应将其重置为相同的颜色。我正在使用布尔值isSelected来确定其是否高亮显示。按钮被高亮显示,但不知何故,它没有重置回其原始颜色。任何帮助都将不胜感激 我被选为private bool isSelected=false 按钮事件处理程序 protected void Button2_Click(object sender, EventArgs e) { if (!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");
    }

您正在尝试在回发之间保存变量的状态。。。这并不像你想象的那么简单…
在您的情况下,您正在设置
IsSelected=true
,但在下一次回发(下次单击按钮)时,它会返回到false,因为变量在每次回发时都会重新声明(在本例中是原始的
false
值)。Asp.Net基本上是无状态的

您可以通过将IsSelected保存在或甚至作为隐藏字段来解决此问题

我认为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
。你应该读一读它们之间的区别(我添加了链接),看看哪一个最符合你的需要。

问题是:
isSelected
总是错误的

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

那你是怎么解决的呢?您将
isSelected
的值存储在某个地方。您可以使用会话变量(存储在服务器内存中),或者最好使用ViewState变量(存储在页面文本本身中)。您可以使用getter和setter将
isSelected
设置为一个属性,如下所示:

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,默认情况下是这样。另一种可能是将
isSelected
的内容存储在一个隐藏的字段控件中(该控件也在后台使用ViewState)。

将“isSelected”存储在哪里?@SystemDown其声明在事件句柄之外我将使用javascript切换css类。但那只是我:)你想要双击吗。。?或者单击一下。。这应该适合您
button.BackColor=System.Drawing.Color.Blue用于example@Blachsma如果我将它包含在AJAX
updatePanel
下,我还必须将它存储在会话变量中吗?updatePanel实际上不会更改会话变量。例如,如果您将其保存在hiddenfield(在updatepanel之外)中,它可能会产生影响。谢谢!但我不得不接受布拉希玛·贝卡兹,他回答earlier@DarknessBeginsHere-没问题。很高兴我们能解决你的问题。