试图重置会话计数器

本文关键字:会话 计数器 | 更新日期: 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"]);
    }
}

现在,当单击重置按钮时,该逻辑将不会被击中,尽管此时您可能会发现计数器仍然不为空,因此您可能需要在重置按钮处理程序中删除该检查。