试图重置会话计数器
本文关键字:会话 计数器 | 更新日期: 2023-09-27 18:01:39
我有下面的代码计数会话,基本上你可以添加一个名称和状态,这是保存在会话和信息进入列表框。你可以随心所欲地添加,这也使会话计数器每次增加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");
}
}
}
您不能简单地重置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;
}
}
并删除类级别变量。这使得代码更简单。
如果会话变量Count为空,则全局sessionCount仅被设置为0。
由于Page_Load事件将变量设置为0或实际计数,因此当按钮被按下时,它永远不会为空-在回发时,Page_Load事件将在控件事件发生之前触发。
您可以使用以下包装器来解决这个问题:
if (!Page.IsPostBack)
{
if (Session["Count"] == null)
{
sessionCount = 0;
}
else
{
sessionCount = Convert.ToInt32(Session["Count"]);
}
}
现在,当单击重置按钮时,该逻辑将不会被击中,尽管此时您可能会发现计数器仍然不为空,因此您可能需要在重置按钮处理程序中删除该检查。