Response与Request的Cookies
做完了《ASP.NET 入门经典》11.5节在页面上使用多种状态管理技术的例子,点Apply按钮可以改变样式,但是页面首次载入时就是不能加载css,察看输出的html,发现<link id="css" href=' ' type="text/css" rel="stylesheet" />这里的href为空。
因为点Apply按钮可以改变样式,问题应该出在Page_Load()里。
仔细检查源码,发现少写了当Cookies不存在时,将Session["SelectedCss"]赋值的代码,加上以下代码:
else {
Session["SelectedCss"] = Request.Cookies["PerferredCss"].Value;
}
加上了以上代码,仍然不行,加入输出信息的代码,就像下面的这一类代码:
Response.Write("<br />Session[\"SelectedCss\"] == null");
发现总是提示Cookies["PerferredCss"]已经存在,删除Cookies文件,仍然提示Cookies存在,这样逻辑就有问题了:Cookies存在,Session["SelectedCss"]就为Cookies里的值,如果不存在,就用默认的"WroxUnited.css";现在Cookies存在,但是值为空,所以Session["SelectedCss"]的值为空。
这就奇怪了,明明Cookies不存在,但是就是提示存在呢?仔细对比从网上下的源码,终于发现,在判断语句里是这样写的:
if(Response.Cookies["PerferredCss"] == null)
这里的Cookies是Response对象的,而不是Request对象的,将Response改为Request,就正常了。
Response对象与Request对象的具体意义还是没有理解清楚。
Response.Cookies是什么?在提交Cookies时用这个。
Request.Cookies在引用时使用。
难道就这一点区别?