【问题标题】:Page Refresh and Counter Value页面刷新和计数器值
【发布时间】:2013-07-02 11:50:50
【问题描述】:

我有一个网页,在页面加载时,将计数器初始化为 0。在每次回发时,保存在会话中的计数器递增 1,直到达到 4 的值。基本上,这个想法这背后是用户有 4 次机会输入用户名和屏幕上显示的验证码图像。如果用户失败了 4 次(因此使用了计数器),他将被重定向到错误页面。

这是我页面加载中的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        Label_Error.Visible = false;
        Session["Count"] = 0;
    }

    else
    {
        if (Session["Count"] == null)
        {
            Session.Abandon();
                Response.Redirect("CheckOutErrorPage.htm");
        }

        else
        {
            int count = (int)Session["Count"];
            count++;
            Session["Count"] = count;
        }
    }
}

当单击按钮时,正在检查 count == 4。现在代码工作正常。如果用户点击按钮 4 次,他就不再被允许。如果用户点击刷新按钮,唯一的问题就会出现。事实上,一旦用户点击刷新,计数器就会设置为 0,他还有 4 次尝试。我怎样才能阻止这种情况发生?我不希望在页面刷新时将计数器设置为 0。我希望计数器的值保持原样。请问我该怎么做?

【问题讨论】:

    标签: c# asp.net browser refresh


    【解决方案1】:

    问题根本在于这部分:

    if (!this.IsPostBack)
    {
        Label_Error.Visible = false;
        Session["Count"] = 0;
    }
    

    如果您要先检查会话变量是否存在,而不是自动覆盖该值,这可能会解决您的问题:

    if (!this.IsPostBack)
    {
        Label_Error.Visible = false;
        Session["Count"] = Session["Count"] ?? 0;
    }
    

    当然,这确实假设用户没有清除他们的 cookie 并开始新的会话。

    【讨论】:

    • 确实如此。似乎每次刷新页面时,它都会调用该代码语句,从而重置计数器。
    • 请问这部分代码是什么意思?会话[“计数”] ?? 0;
    • @Matthew 被称为“空合并运算符”;如果左侧的值为空,则返回右侧。这是谷歌很难找到的语法之一!
    • 所以相当于 if(Session["Count"] = null) {Session["Count"] = 0}?我理解正确吗?
    • 几乎相同,是的(对于您的第二个示例,而不是第一个示例)。快速浏览一下 MSDN,msdn.microsoft.com/en-us/library/ms173224.aspx
    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2021-04-05
    • 2020-04-19
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多