我有一个名为CheckBoxActivated的布尔变量,在验证用户名和密码后将其赋值为true。
string name = us.UserName;
string password = us.Password;
if (name.Equals(txtName.Text) && (password.Equals(txtPassword.Text)))
{
CheckBoxAvtivated = true;奇怪的是,在对变量设置了'true‘之后,我点击了另一个按钮,它立即变成了'false’,这导致了不想要的行为。
protected void butNext_Click(object sender, EventArgs e)
{
if (CheckBoxAvtivated)
{
pnlCheckBoxes.Visible = true;
pnlUserCheckBoxValidation.Visible = false;
}
else
{
pnlCheckBoxes.Visible = false;
pnlUserCheckBoxValidation.Visible = true;
}因此,变量的状态会意外地更改为false。为什么会发生这种情况呢?
发布于 2013-01-31 14:07:10
asp.net中的类级变量(全局变量)不会在回发之间保持状态。如果你想在回发之间保持状态,就必须使用视图状态。Asp.net基于http协议,是无状态协议,不提供在请求之间存储用户数据的方法
在视图状态中设置的步骤
ViewState["CheckBoxAvtivated"] = "true";从视图状态获取
bool CheckBoxAvtivated = bool.Parse(ViewState["CheckBoxAvtivated"].ToString());学习如何使用视图状态以及在哪些地方不应该使用视图状态非常重要。
视图状态的作用
视图状态的用途很简单:它用于跨回发持久化状态。(对于ASP.NET网页,其状态是构成其控件层次结构的控件的属性值。)这就引出了这样一个问题:“需要保持什么样的状态?”为了回答这个问题,让我们先来看看哪些状态不需要跨回发保持。回想一下,在页面生命周期的实例化阶段,将创建控件层次结构,并分配声明性语法中指定的那些属性。由于在构造控件层次结构时会在每次回发时自动重新分配这些声明性属性,因此无需将这些属性值存储在视图状态中。您可以阅读有关视图状态here的更多信息。
无状态协议
在计算中,无状态协议是一种通信协议,它将每个请求视为与任何先前请求无关的独立事务,以便通信由独立的请求和响应对组成。无状态协议不要求服务器在多个请求的持续时间内保留有关每个通信伙伴的会话信息或状态。相反,需要保持内部状态的协议称为有状态协议。要了解更多关于状态更少的信息,请参阅维基百科article
https://stackoverflow.com/questions/14619476
复制相似问题