试图重置会话计数器

时间:2014-05-02 23:22:11

标签: c# asp.net session

我有下面的代码来计算会话,基本上你可以添加一个名称和状态保存在会话中,并且该信息会进入列表框。您可以添加任意多个,这也使会话计数器每次增加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");


    }
}

}

2 个答案:

答案 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;
    } 
}

删除类级变量。这使代码更简单。