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如果我将它包含在AJAXupdatePanel
下,我还必须将它存储在会话变量中吗?updatePanel实际上不会更改会话变量。例如,如果您将其保存在hiddenfield(在updatepanel之外)中,它可能会产生影响。谢谢!但我不得不接受布拉希玛·贝卡兹,他回答earlier@DarknessBeginsHere-没问题。很高兴我们能解决你的问题。