【问题标题】:Cookie only displayed on refresh?Cookie 仅在刷新时显示?
【发布时间】:2009-06-13 05:45:44
【问题描述】:

我很难理解这个,所以就在这里。

我正在尝试使用 ASP.NET + C# 设置 cookie 并在页面上显示该值。

这是我的代码:

protected void lbChangeToSmall_Click(object sender, EventArgs e)
        {
            Response.Cookies["fontSize"].Value = "small";
        }

<asp:LinkButton runat="server" id="lbChangeToSmall" Text="A" CssClass="txt-sm" OnClick="lbChangeToSmall_Click"></asp:LinkButton>

最后

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Response.Write( Request.Cookies["fontSize"].Value);
            }

        }

当我点击按钮时,页面上没有显示任何内容,但实际上设置了 cookie。如果我刷新页面,就会显示 cookie。

看来 cookie 设置正确,但应用程序无法立即读取它。

我试图摆脱 if(postBack):

 protected void Page_Load(object sender, EventArgs e)
        {
                Response.Write( Request.Cookies["virgilFontSize"].Value);
        }

但这并没有改变任何事情。

我做错了什么?

谢谢!

【问题讨论】:

    标签: c# asp.net cookies


    【解决方案1】:

    lblChangeToSmall_Click 事件在Page_Load 事件之后触发。因此,在随后的回发之前,请求上的 cookie 写入将不可用。

    但它会立即在客户端上可用。

    【讨论】:

    • 哦,我以为它会调用方法,然后刷新页面,调用page_load...有没有办法解决这个问题?
    • 使用 Javascript 在客户端设置字体大小。或者做另一个重定向到页面。或者查看 page_load 实际需要对 cookie 执行的操作,并从 click 事件中执行此操作。
    • 感谢您的帮助!如何再次重定向到该页面?这些按钮在母版页上,所以我不知道我不想重定向到哪个页面。我不认为我可以重定向到“”。重定向到“?”将我发送到 url.com/page.aspx/?哪个中断。
    【解决方案2】:

    第一次,请求没有cookies(还);在 response 设置它们之后,它只会在第二次出现它们。因此,您的代码必须处理Request.Cookies 可能没有 "fontSize" 条目的可能性,并在这种情况下提供适当的默认值。例如:

    HttpCookie cookie = Request.Cookies.Get("fontSize");
    // Check if cookie exists in the current request.
    if (cookie == null)
    {
       Response.Write( "Defaulting to 'small'.");
    }
    else
    {
       Response.Write( Request.Cookies["fontSize"].Value);
    )
    

    【讨论】:

    • 它是 HTTP 标准的一部分——你无法真正改变它。编辑我的答案以显示如何处理...
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 2018-01-30
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2021-12-17
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多