【问题标题】:Why is the value of my boolean variable lost between postback为什么我的布尔变量的值在回发之间丢失
【发布时间】:2013-01-31 06:05:43
【问题描述】:

我有一个名为 CheckBoxActivated 的布尔变量,我在验证用户名和密码后将其赋值为 true。

string name = us.UserName;
string password = us.Password;

if (name.Equals(txtName.Text) && (password.Equals(txtPassword.Text)))
{
    CheckBoxAvtivated = true;

奇怪的是,在将“真”分配给变量后,我单击另一个按钮,它立即变为“假”,这会导致不良行为。

protected void butNext_Click(object sender, EventArgs e)
{
    if (CheckBoxAvtivated)
    {
        pnlCheckBoxes.Visible = true;
        pnlUserCheckBoxValidation.Visible = false;
    }
    else
    {
        pnlCheckBoxes.Visible = false;
        pnlUserCheckBoxValidation.Visible = true;
    }

变量的状态因此意外地变为 false。为什么会发生这种情况?

【问题讨论】:

  • 不使用IF条件,可以直接设置值,pnlCheckBoxes.Visible = CheckBoxAvtivated; pnlUserCheckBoxValidation.Visible = !CheckBoxAvtivated;

标签: c# asp.net postback


【解决方案1】:

asp.net 中的类级别变量(全局变量)不维护回发之间的状态,如果要保持回发之间的状态,则必须使用 viewstate。 ASP.NET 基于 HTTP 协议,该协议是无状态协议,不提供在请求之间存储用户数据的方法

在视图状态中设置

ViewState["CheckBoxAvtivated"] = "true";

从视图状态获取

bool CheckBoxAvtivated = bool.Parse(ViewState["CheckBoxAvtivated"].ToString());

了解在哪里使用视图状态以及在哪里不应该使用它很重要。

视图状态的作用

视图状态在生活中的目的很简单:它在那里保持状态 跨回发。 (对于 ASP.NET 网页,它的状态是属性 构成其控件层次结构的控件的值。)这乞求 问题,“需要保持什么样的状态?”回答 这个问题,让我们先看看不需要什么状态 在回发中持续存在。回想一下,在实例化阶段 页面生命周期,控件层次结构被创建和那些 分配声明式语法中指定的属性。 由于这些声明性属性会自动重新分配 构造控制层次结构时的每个回发,都没有 需要将这些属性值存储在视图状态中。

来自MSDN

无状态协议

在计算中,无状态协议是一种通信协议, 将每个请求视为一个独立的事务,与 任何先前的请求,以便通信由独立的 请求和响应对。无状态协议不需要 服务器保留有关每个会话的信息或状态 多个请求期间的通信伙伴。在 相反,需要保持内部状态的协议是 称为有状态协议。

来自Wikipedia

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2010-12-22
    • 2013-09-02
    • 2014-08-23
    • 2016-07-15
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多