【问题标题】:Trying to reset session counter尝试重置会话计数器
【发布时间】:2014-06-19 17:50:27
【问题描述】:

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


    }
}

}

【问题讨论】:

    标签: c# asp.net session


    【解决方案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;
        } 
    }
    

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

    【讨论】:

    • 由于某种原因不会重置计数器。
    • 我刚刚找到了原因。这必须在按钮重置 Application["HitCount"] = 0;
    • 感谢 Ryan,当您发布该问题时,我正在编辑我的原始问题。我找到了事情有点不稳定的原因。有一些冗余代码(会话/应用程序),我清理了一些与之相关的东西。原始帖子中的代码有效。我也会试试你的方法。谢谢
    【解决方案2】:

    仅当 Session 变量 Count 为空时,全局 sessionCount 才被设置为 0。

    由于 Page_Load 事件将变量设置为 0 或实际计数,因此当按下按钮时,它永远不会为空 - 在回发时,Page_Load 事件将在控件事件之前触发。

    您可以使用以下围绕 Page_Load 中的逻辑的包装器来解决此问题:

    if (!Page.IsPostBack)
    {
        if (Session["Count"] == null)
        {
            sessionCount = 0;
        }
        else
        {
            sessionCount = Convert.ToInt32(Session["Count"]);
        }
    }
    

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

    【讨论】:

    • 我已更新原始问题以反映您的建议。重置按钮仍然不会将计数器重置为 0
    猜你喜欢
    • 1970-01-01
    • 2013-02-07
    • 2014-01-21
    • 2013-05-12
    • 2020-05-01
    • 2012-10-26
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多