0

我添加了一些调试代码,试图弄清楚我的 Session 变量发生了什么,它似乎总是空的。

有人可以告诉我我做错了什么吗?

这可能是一些新手错误,因为我不做太多的网络开发。

private const string PASSWORD = "PASSWORD";

protected void Page_Load(object sender, EventArgs e) {
  if (String.IsNullOrEmpty(password)) {
    lblMessage.Text = !IsPostBack ? "Not a PostBack!" : "A PostBack.";
  } else {
    ShowData(IsPostBack);
  }
}

private string password {
  get { return Session[PASSWORD] as string; }
  set { Session[PASSWORD] = value; }
}

protected void Password_Click(object sender, EventArgs e) {
  string val = txtPassword.Text.Trim();
  if (val == ConfigurationManager.ConnectionStrings[PASSWORD].ConnectionString) {
    password = val;
    txtPassword.Text = null;
  } else {
    Response.Redirect(val);
  }
}

private void ShowData(bool postType) {
  // I would display my data here if it ever got to this point!
}

编辑:Password_Click事件触发时,我所看到的只是“不是回发!” 或“回邮”。所以,我的 Session 变量不能被设置。

4

3 回答 3

1

查看您的代码,我看到的唯一可以创建此行为的“问题​​”是这一行:

Response.Redirect(val);

我会说您正在获得重定向,因为否则您的代码对我来说似乎是正确的。

于 2013-05-09T22:05:11.337 回答
1

在这种情况下,设置 Session[PASSWORD] (实际上是 Session["PASSWORD"]) 的唯一方法是 web.config 中有一个条目:

<configuration>
    <connectionStrings>
        <add name="PASSWORD" connectionString="xxx" providerName="<Some Provider>" />
    </connectionStrings>
</configuration>

然后在 txtPassword 控件中键入一个字符串,该字符串与 web.config 部分中 PASSWORD 条目的 connectionString 属性中的字符串相匹配

于 2013-05-09T22:16:21.927 回答
1

除非您专门禁用了会话状态(我认为您没有这样做),否则您的代码看起来还不错。

我唯一能想到的是你的方法Password_Click没有被调用。

请在那里放一个断点,看看变量是否真的被设置了。如果不向我们展示 ASP.NET 标记,那么我们可以看到为什么它没有触发事件

于 2013-05-10T13:51:00.827 回答