我有一个button
突出显示第一次点击。在秒上单击它应该重置为相同的颜色。我使用boolean
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");
}
答案 0 :(得分:1)
你试图在回发之间保存一个变量状态......这并不像你想象的那么简单......
在你的情况下,你在下一个Postback上设置IsSelected = true
(下次单击按钮时)它会回到false,因为变量是在每次回发时重新声明的(在它的原始false
值中这个案例)。 Asp.Net基本上是无状态的。
您可以通过在 Session 或 ViewState 或甚至 hiddenfield 中保存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
即可。您应该阅读一下它们之间的区别(我添加了链接)并查看哪些最符合您的需求。
答案 1 :(得分:1)
问题在于:isSelected
始终为假。
你必须记住的关于ASP.NET(以及一般的Web应用程序)的事情是,一切都是无状态的。这基本上意味着为每个回发创建了一个 new 页面类的实例。由于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)中。