行 89: {
行 90: string name,password;
行 91: if (Request.Cookies["userinfo"]["name"].ToString()!=null )
行 92: { name=Request.Cookies["userinfo"]["name"].ToString();}
行 93: else name="";
源文件: h:\第8章\testnews\data\login.aspx.cs 行: 91
我如果事先写入了cookie就不报错,但如果用户清除了cookie那就不行了,也就是说要机子上有
Cookies["userinfo"]["name"]存在才行,这样好像不合理吧?再说了也用了IF来判断了,哪位老兄知道,谢谢!
行 90: string name,password;
行 91: if (Request.Cookies["userinfo"]["name"].ToString()!=null )
行 92: { name=Request.Cookies["userinfo"]["name"].ToString();}
行 93: else name="";
源文件: h:\第8章\testnews\data\login.aspx.cs 行: 91
我如果事先写入了cookie就不报错,但如果用户清除了cookie那就不行了,也就是说要机子上有
Cookies["userinfo"]["name"]存在才行,这样好像不合理吧?再说了也用了IF来判断了,哪位老兄知道,谢谢!
你试试 这样
customerDetails 是类里的一个 结构体
object o = Request.Cookies["userinfo"]["name"]
如果
o 是空引用
那么 o.ToString() 是什么呢?难道是null吗?你的程序就错在这里
io8(星宇) 兄,你给的代码我不是太明白,但是现在重要的是取cookie,因为不管写入怎么写,用户清除Cookie后就没有用了!谢谢!
行 90: string name,password;
行 91: if (Request.Cookies["userinfo"]["name"]!=null )
行 92: { name=Request.Cookies["userinfo"]["name"].ToString();}
行 93: else name="";
我把tostring去掉一样的报错!
......
if (Request.Cookies["userinfo"]["name"].ToString()!=null )类型null并非文本类型,它是一个object类型
Request.Cookies["userinfo"]["name"]这样取到的值,也不是文本类型,所以我们在使用的时候要对它进行转换,转成文本,恰恰在转换的时候出错了,因为文本类型的值是不可以null的,变量为null的时候想转换成文本必然出错.
所以楼主应改如下:
if(this.Request.Cookies["userinfo"]["name"] != null || this.Request.Cookies["userinfo"]["name"].ToString() != "")
或者:
if((this.Request.Cookies["userinfo"]["name"] + "a") != "a")
问题是如果是空的话~this.Request.Cookies["userinfo"]["name"] 也不会等于null
解决的办法你可以用这个:
try
{
string name,password;
if (Request.Cookies["userinfo"]["name"].ToString()!=null )
{ name=Request.Cookies["userinfo"]["name"].ToString();}
}
catch
{
name="";}
意思就是说,如果不为空的话~就不会出错,所以就直接赋值,
如果为空,就会出错,则执行catch的内容
if (Request.Cookies["userinfo"]["name"].ToString()!=null )
改成
if(!Object.ReferenceEquals(Request.Cookies["userinfo"]["name"],null))
按照上面的就解决了
应该这样
if(Request.Cookies["userinfo"]!=null && Request.Cookies["userinfo"]["name"]!=null)
{
}
楼主存储的name是userinfo键值得子键值,userinfo都不存在还谈什么name