我添加了一些调试代码,试图找出我的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变量不能被设置。
答案 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标记,那么我们可以看到为什么它没有触发事件