我有下面的代码来计算会话,基本上你可以添加一个名称和状态保存在会话中,并且该信息会进入列表框。您可以添加任意多个,这也使会话计数器每次增加1。我遇到的问题是重置按钮。它会重置页面,但不会重置会话计数器,或者重置为0。
namespace sessions
{
public partial class Default : System.Web.UI.Page
{
int sessionCount;
protected void Page_Load(object sender, EventArgs e)
{
LabelCount.Visible = false;
if (!Page.IsPostBack)
{
if (Session["Count"] == null)
{
sessionCount = 0;
}
else
{
sessionCount = Convert.ToInt32(Session["Count"]);
}
}
}
protected void ButtonSave_Click(object sender, EventArgs e)
{
LabelCount.Visible = true;
Session["TextBoxFirst"] = TextBoxFirst.Text;
Session["TextBoxLast"] = TextBoxLast.Text;
Session["TextBoxState"] = TextBoxState.Text;
if ((RequiredFieldValidator1.IsValid) && (RequiredFieldValidator2.IsValid) && (RequiredFieldValidator3.IsValid) && (RequiredFieldValidator4.IsValid) && (RegularExpressionValidator1.IsValid))
{
ListBox1.Items.Add(Session["TextBoxFirst"] + " " + Session["TextBoxLast"] + " " + "from" + " " + Session["TextBoxState"]);
}
{
Application.Lock();
int sessionCount = Convert.ToInt32(Session["SessionCount"]);
sessionCount++;
Session["SessionCount"] = sessionCount;
Application.UnLock();
LabelCount.Text = "Session Count Is " + sessionCount;
}
}
protected void ButtonReset_Click(object sender, EventArgs e)
{
Session["SessionCount"] = 0;
Server.Transfer("Default.aspx");
}
}
}
答案 0 :(得分:1)
如果Session变量Count为null,则全局sessionCount仅设置为0。
由于Page_Load事件将变量设置为0或实际计数,因此当按下按钮时,它永远不会为空 - 在回发时,Page_Load事件将在控制事件发生之前触发。
您可以使用以下包装器来解决这个问题:Page_Load:
中的逻辑if (!Page.IsPostBack)
{
if (Session["Count"] == null)
{
sessionCount = 0;
}
else
{
sessionCount = Convert.ToInt32(Session["Count"]);
}
}
现在,单击重置按钮时不会触发此逻辑,尽管此时您可能会发现计数器仍然不为空,因此您可能需要删除该检入重置按钮处理程序。
答案 1 :(得分:1)
您是否只能在ButtonReset_Click
事件中重置计数器?
protected void ButtonReset_Click(object sender, EventArgs e)
{
Session["Count"] = 0;
Server.Transfer("Default.aspx");
}
我还考虑将会话访问权限包装到一个简单的属性
中public int SessionCount
{
get
{
return Session["Count"] ?? 0;
}
set
{
Session["Count"] = value;
}
}
删除类级变量。这使代码更简单。