我不知道怎么把标题写下来,因为我甚至无法描述这个问题,这就是问题所在。
(这只是一个简单的问题)
假设我有两个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();
},我期待的是:
我希望标签的文本在我检查第一个checkBox时显示"1“,当我检查第二个checkBox时显示"2”
,这是我得到的:
我两次都得到"1“,当我手动检查cookie时,我看到它包含12,所以在检查第二个checkBox之后,它的长度应该变成2,而标签显示它的长度保持1
这是为什么!!我错过了什么吗??
发布于 2014-04-23 21:47:53
如果希望在调用CheckedChanged之后立即看到该值,则需要将响应值分配给Label。
否则,Label控件将在下一次回发之前不会反映更改。
见注释区域中的箭头-
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();
// ^
// |
}发布于 2014-04-23 21:52:35
阅读Response.Cookies“UserPreferences”..Value的第一个标签。不是请求的
发布于 2014-04-23 22:11:59
而不是
Request.Cookies["UserPreferences"].Value.Length.ToString();使用
Response.Cookies["UserPreferences"].Value.Length.ToString();那是为什么?请求是web客户端发送给web服务器的内容。响应是web服务器发送的--嗯,作为响应。两者都是在HTTP规范中定义的。(它们是如何构造的,它们包括哪些信息和元数据,等等)
你可以在这里读到更多关于它的信息:Use of Request and Response in ASP.Net
https://stackoverflow.com/questions/23255002
复制相似问题