使用AutoPostBack的Cookie响应问题

时间:2014-04-23 20:56:02

标签: c# asp.net cookies

由于我甚至无法描述问题,我不确切知道如何设置标题,这就是问题..

(这只是问题的简要说明)

说我有两个CheckBoxes设置为AutoPostBack = True

protected void cbPop_CheckedChanged(object sender, EventArgs e)
{
    Response.Cookies["UserPreferences"].Value = Request.Cookies["UserPreferences"].Value + "1";
    Label1.Text = Request.Cookies["UserPreferences"].Value.Length.ToString();
}

protected void cbDown_CheckedChanged(object sender, EventArgs e)
{
    Response.Cookies["UserPreferences"].Value = Request.Cookies["UserPreferences"].Value + "2";
    Label1.Text = Request.Cookies["UserPreferences"].Value.Length.ToString();
}

以下是我的期望:

当我检查第一个复选框时,我希望标签的文本显示为“1”,当我检查第二个复选框时,我希望显示“2”

以下是我得到的内容:

我两次都得到“1”,当我手动检查cookie时,我看到它包含12,所以在检查第二个复选框后它的长度应该变为2,而标签显示它的长度仍为1

为什么!我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

如果您希望在调用CheckedChanged后立即看到该值,则需要将响应值分配给标签

否则,标签控件不会反映这些更改,直到下次发回。

请参阅注释区域中的箭头 -

protected void cbPop_CheckedChanged(object sender, EventArgs e)
{
    Response.Cookies["UserPreferences"].Value = 
       Request.Cookies["UserPreferences"].Value + "1";
    Label1.Text = Response.Cookies["UserPreferences"].Value.Length.ToString();
    //                ^
    //                |
}

protected void cbDown_CheckedChanged(object sender, EventArgs e)
{
    Response.Cookies["UserPreferences"].Value = 
        Request.Cookies["UserPreferences"].Value + "2";
    Label1.Text = Response.Cookies["UserPreferences"].Value.Length.ToString();
    //                ^
    //                |
}

答案 1 :(得分:2)

阅读Response.Cookies [“用户首选项”]。值的标签长度​​。 不是请求的

答案 2 :(得分:1)

而不是

Request.Cookies["UserPreferences"].Value.Length.ToString();

使用

Response.Cookies["UserPreferences"].Value.Length.ToString();

为什么? 请求是Web客户端发送到Web服务器的内容。响应是Web服务器发送的 - 作为响应。两者都在HTTP规范中定义。 (它们的结构,它们包含的信息和元数据等)。

您可以在此处详细了解: Use of Request and Response in ASP.Net