当前位置:编程学习 > C#/ASP.NET >>

100分跪求关于购物车cookie问题,帮我看看代码出了什么问题,或者给个例子

写入到cookie,有时会报"未将对象引用设置到对象的实例"这个错

String CookieName = "";
if (Session["HYID"] == null)
    CookieName = "PID" + 1;
else
    CookieName = "PID" + Session["HYID"].ToString();

HttpCookie cookie;

if (Request.Cookies[CookieName] == null)
{
    cookie = new HttpCookie(CookieName);

    cookie.Expires = DateTime.Now.AddMonths(6);
    cookie.Values.Add("PID", PID + "1");
    cookie.Values.Add("PicUrl", Properties.Settings.Default.ProductPicUrl + dt.Rows[0]["PicUrl"].ToString());
    if (Session["HYID"] != null)
        cookie.Values.Add("Price", dt.Rows[0]["PriceClient"].ToString());
    else
        cookie.Values.Add("Price", dt.Rows[0]["Price"].ToString());
    cookie.Values.Add("PName", dt.Rows[0]["PName"].ToString());
    cookie.Values.Add("PageUrl", "ProductView.aspx?PID=" + PID);
    Response.Cookies.Add(cookie);
}
else
{
    cookie = Request.Cookies[CookieName];

    if (cookie["PID"].ToString().Contains(PID + "1") == false)
    {
        cookie.Expires = DateTime.Now.AddMonths(6);
        cookie.Values["PID"] += "|" + PID + "1";
        cookie.Values["PicUrl"] += "|" + Properties.Settings.Default.ProductPicUrl + dt.Rows[0]["PicUrl"].ToString();
        if (Session["HYID"] != null)
             cookie.Values["Price"] += "|" + dt.Rows[0]["PriceClient"].ToString();
        else
             cookie.Values["Price"] += "|" + dt.Rows[0]["Price"].ToString();
             cookie.Values["PName"] += "|" + dt.Rows[0]["PName"].ToString();
             cookie.Values["PageUrl"] += "|" + "ProductView.aspx?PID=" + PID;
             Response.Cookies.Set(cookie);
      }
}

读取cookie,有时会报"索引超出了数组界限"

String CookieName = "";
if (Session["HYID"] == null)
    CookieName = "PID" + 1;
else
    CookieName = "PID" + Session["HYID"].ToString();

HttpCookie cookie;

if (Request.Cookies[CookieName] != null)
{
    cookie = Request.Cookies[CookieName];

    String StrPID = cookie["PID"];
    String StrPicUrl = cookie["PicUrl"];
    String StrPrice = cookie["Price"];
    String StrPName = cookie["PName"];
    String StrPageUrl = cookie["PageUrl"];

    int j = 0;
    tdViewed.InnerHtml = "<table cellpadding='0' cellspacing='0' border='0'><tr>";
    for (int i = 0; i < StrPID.Split('|').Length; i++)
    {
         String PicUrl = StrPicUrl.Split('|')[i].ToString();
         String PName = StrPName.Split('|')[i].ToString();
         String PageUrl = StrPageUrl.Split('|')[i].ToString();
         String Price = StrPrice.Split('|')[i].ToString();
         j = i + 1;
         tdViewed.InnerHtml += "<td align='center' width='100px' valign='top'>";
         tdViewed.InnerHtml += "<table width='82px' border='0' cellpadding='0' cellspacing='0' style='margin-bottom: 22px'>";
         tdViewed.InnerHtml += "<tr><td width='82px' height='82px' style='border: 1px solid #C6C6C6'>";
         tdViewed.InnerHtml += "<a href='" + PageUrl + "'><img src='" + PicUrl + "' onload='javascript:DrawImage(this,60,60);' border='0' alt='" + PName + "'></a>";
         tdViewed.InnerHtml += "</td></tr>";
         tdViewed.InnerHtml += "<tr><td align='center' style='padding:4px 7px 4px 7px;' valign='middle'>";
         tdViewed.InnerHtml += "<font color='#FF0000'><b>¥ " + Convert.ToDouble(Price).ToString("f2") + "</b></font>";
         tdViewed.InnerHtml += "</td></tr>";
         tdViewed.InnerHtml += "</table></td>";

         if (j % 2 == 0)
         {
             tdViewed.InnerHtml += "</tr><tr>";
         }
     }
     tdViewed.InnerHtml += "</tr></table>";
} --------------------编程问答-------------------- 这些都是经验问题,你不可能把一大堆问题一次发出来,具体有针对性,这样才好回答。如果是那样不如我帮你做算了。

购物车不就是简简单单的内存数据而已,也就是说将数据保存到session或cookie中。再仔细检查检查吧! --------------------编程问答-------------------- 先调试吧,找出到底运行到哪一行报这个错误“未将对象引用设置到对象的实例”
你这样代码太多了,很少有人有那么多时间一行一行去看的。 --------------------编程问答-------------------- 检个屁呀,都检了好几十遍啦,当局者迷嘛,不然大家都发帖干嘛 --------------------编程问答-------------------- 贴黄色,看看错误代码,停在那里,再去找问题所在之处。。。 --------------------编程问答-------------------- 设断点看在哪一行报错 --------------------编程问答-------------------- 本地调不出来的,要放到网上才会报错的,有没有高手呀,来报个到呀 --------------------编程问答-------------------- 如果楼主方便的话,就更改文件,用一些比如Response.Write,一个个得看结果,看看那里应用出错。。。这样也许,才有答案,我有时也是这样子,没办法,本地没问题,也只能这样测试。。。 --------------------编程问答-------------------- 我同意ls的,貌似我也经常response.write,输出一下,看到底哪里错误... --------------------编程问答--------------------
引用 6 楼 wenhuiyan 的回复:
本地调不出来的,要放到网上才会报错的,有没有高手呀,来报个到呀


你确定本地没有任何问题? --------------------编程问答-------------------- 读取cookie,有时会报"索引超出了数组界限"


-----------------------------------------

把你存在 cookie的值 减少,再测试测试。

ie下 cookie的默认存储量 大约4800多字节(大概,我记不得了.)


如果你存储的信息过多,那么尾部数据将丢失。 造成赋值异常!

火狐和GG下 貌似 没有限制。(我也不记得了。。) --------------------编程问答-------------------- cookie.Values.Add("PicUrl", Properties.Settings.Default.ProductPicUrl + dt.Rows[0]["PicUrl"].ToString());
  if (Session["HYID"] != null)
  cookie.Values.Add("Price", dt.Rows[0]["PriceClient"].ToString());
  else
  cookie.Values.Add("Price", dt.Rows[0]["Price"].ToString());
  cookie.Values.Add("PName", dt.Rows[0]["PName"].ToString());
-------------------------------------------------------------------

判断dt中的数据是否为null  --------------------编程问答-------------------- for (int i = 0; i < StrPID.Split('|').Length; i++)
  {
  String PicUrl = StrPicUrl.Split('|')[i].ToString();
  String PName = StrPName.Split('|')[i].ToString();
  String PageUrl = StrPageUrl.Split('|')[i].ToString();
  String Price = StrPrice.Split('|')[i].ToString();

-------------------------------------------------------

这个存的内容长度不一致, 用存的长的下标访问短的就会报 “索引超出了数组界限” --------------------编程问答-------------------- 恩,dt确实为空 --------------------编程问答-------------------- 不是dt的问题,是cookie的问题 --------------------编程问答-------------------- 有时会报"未将对象引用设置到对象的实例"这个错
---------------------------------------

就是你某个数据 为null  在 .ToString() 的时候报错了 --------------------编程问答-------------------- 你们明不明白呀,一台机访问无论是本地,还是网上都没问题,如果两台机访问就会报以上的错 --------------------编程问答-------------------- 清空你的cookie 然后再调试。。。断点COOKIE 一步步看里面的值是不是你的 一共代码一没几行。。。。- -!还凶巴巴的 又不欠你的 --------------------编程问答-------------------- 我怎么感觉1楼像是很叼一样似的...语气很是看不惯...bs
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,