Cookie仅在刷新时显示?

时间:2009-06-11 21:25:28

标签: c# asp.net cookies

我在理解这个问题时遇到了一些麻烦。

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

这是我的代码:

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);
        }

但它没有改变一件事。

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

lblChangeToSmall_Click事件后触发Page_Load事件。因此,在随后的回发之前,请求中不会提供cookie写入。

虽然它会立即在客户端上发布。

答案 1 :(得分:0)

第一次,请求没有cookie(尚未);在响应设置后,它只会第二次出现。因此,您的代码必须处理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);
)