为什么我的ASP.NET网页没有获取或设置会话变量?

时间:2013-05-09 21:50:15

标签: c# asp.net visual-studio-2010 session

我添加了一些调试代码,试图找出我的Session变量发生了什么,并且看起来它总是空的。

有人能告诉我我做错了吗?

这可能是一些noobie错误,因为我没有做太多的web开发。

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事件触发时,我所看到的只是“不是PostBack!”或者“一个PostBack”。因此,我的Session变量不能被设置。

3 个答案:

答案 0 :(得分:1)

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

Response.Redirect(val);

我会说你正在重定向,因为否则你的代码似乎对我来说。

答案 1 :(得分:1)

在这种情况下,Session [PASSWORD](有效的Session [“PASSWORD”])设置的唯一方法是web.config中是否有条目:

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

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

答案 2 :(得分:1)

除非你有特别禁用的sessionstate(我认为你没有这样做),否则你的代码看起来没问题。

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

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