网站购物车是写入cookie来完成的,在注册用户登陆后购买商品加入购物车时,购物车不能正常显示出来,在用户退出登陆后就购物车中的商品就显示出来了,再进行登陆也能正常显示。正常的是不会区分登陆与否。
页面地址http://ballwest.com/order/Send.aspx?typeUrl=2麻烦各地高手了,这是别人改写的代码,我拿到手就这样,一直研究不透是什么原因。我也没系统的学过c#,仅仅在拿到代码后玩了一年的vs2005。
以下是代码精简商品购买页面代码部分aspx<asp:Button ID="Button1" runat="server" Text="加入购物车" CssClass="input_c" OnClick="btnSureDingzhi_Click" OnClientClick="return checkprice();" Height="27"></asp:Button>商品购买页面代码部分aspx.sc
protected void btnSureDingzhi_Click(object sender, EventArgs e)
 {
  // //传递的参数是订制的id,参数列表,预览图片的地址,订制数量,订制的总价,使用cookie保存值
  string userID = "0";
  DingzhiOrderModel model = new DingzhiOrderModel();
  model.Userid = 0;
  if (Request.Cookies["bw_user"] != null)
  {
  model.Userid = Convert.ToInt32(Request.Cookies["bw_user"]["user_id"].ToString());
  userID = Request.Cookies["bw_user"]["user_id"].ToString();
  }
  if (Request.QueryString["id"] != null)
  {
  this.ViewState["proid"] = Request.QueryString["id"];
  }  DingzhiOrderManager ordermanager = new DingzhiOrderManager();  string subProNO = string.Empty;
  int subNum = 0;
  //int subSize = int.Parse(ddlproSize.SelectedValue);
  Maticsoft.Model.dt_dingzhi pro = new Maticsoft.Model.dt_dingzhi();
  Maticsoft.BLL.dt_dingzhi bll = new Maticsoft.BLL.dt_dingzhi();
  pro.id = int.Parse(this.ViewState["proid"].ToString());
  pro = bll.GetModel(pro.id);
  subProNO = pro.id.ToString();
  string SLbox = slbox.Text;
  this.ViewState["proid"] = pro.id;
  this.ViewState["product_price2"] = pro.price;
  //当商品设置为促销商品,且在促销期内,促销限量 不为0时 显示促销  string proid = string.Empty;
  bool isAdd = false;
  // string lbpri = Convert.ToInt32(this.lblprice.Text);
  if (this.hidprice.Value != "0.0000")
  {
  if (Request.Cookies["Order1"] != null && Request.Cookies["Order1"].ToString() != "")
  {
  string cookiesValue = Request.Cookies["Order1"].Value.ToString();
  //解码
  cookiesValue = HttpUtility.UrlDecode(cookiesValue);
  string[] proRecord = cookiesValue.Split('|');
  for (int i = 0; i < proRecord.Length; i++)
  {
  string[] proArr = proRecord[i].Split(',');
  if (proArr.Length == 5)
  {
  proid = proArr[0].ToString();
  if (subProNO == proid)
  {
  isAdd = true;
  break;
  }
  }
  }
  if (isAdd == true)
  {
  Alert.location("../order/Send.aspx?typeUrl=2");
  }
  else
  {
  setCook(subProNO, SLbox, "1", this.ViewState["product_price2"].ToString(), userID, "Order1");
  Alert.location("../order/Send.aspx?typeUrl=2");
  }  }
  else
  {
  setCook(subProNO, SLbox, "1", this.ViewState["product_price2"].ToString(), userID, "Order1");
  Alert.location("../order/Send.aspx?typeUrl=2");
  }
  }
  else
  {
  Alert.alert(this.Page, "暂时不能购买!");
  }
 } void setCook(string subProNO, string num, string isx, string proprice, string userID, string Actions)
 {
  //写入Cookie
  //string duserID = "0";
  //if (Request.Cookies["bw_user"] != null)
  //{
  // duserID = Request.Cookies["bw_user"]["user_id"].ToString();
 //}
  string proRecord = subProNO + "," + num + "," + isx + "," + proprice + "," + userID;
  //可能有中文,进行预编码
  proRecord = HttpUtility.UrlEncode(proRecord);
  Tool.operateBuyCookie(Actions, proRecord, 100);
  int jj = 4;
 }tool.sc里的operateBuyCookie部分
 public static bool operateBuyCookie(string cookieName, string cookieValue, int count)
  {
  HttpCookie myCookie = new HttpCookie(cookieName);
  //cookie 有效期 一个月
  myCookie.Expires.AddMonths(1);
  if (HttpContext.Current.Request.Cookies[cookieName] != null && !HttpContext.Current.Request.Cookies[cookieName].Value.Equals(""))
  {
  myCookie = HttpContext.Current.Request.Cookies[cookieName];
  myCookie.Value = myCookie.Value + "|" + cookieValue;
  }
  else
  {
  myCookie.Value = cookieValue;
  }
  string[] valueArray = myCookie.Value.Split('|');
  ///超过指定个数,把前面的部分清除
  if (valueArray.Length > count)
  {
  myCookie.Value = "";
  for (int i = valueArray.Length - count; i < valueArray.Length; i++)
  {
  if (i == valueArray.Length - count)
  {
  myCookie.Value += valueArray[i];
  }
  else
  {
  myCookie.Value = myCookie.Value + "|" + valueArray[i];
  }
  }
  }
  HttpContext.Current.Response.Cookies.Add(myCookie);
  return true;
  }购物车页面aspx部分
  <asp:DataList ID="dlProList" runat="server" Width="100%" OnItemCommand="dlProList_ItemCommand" OnItemDataBound="dlProList_ItemDataBound">
  <ItemTemplate>
<table id="gouwuche06" ......
</table>
  </ItemTemplate>
  </asp:DataList>
购物车页面aspx.sc部分
..............
 /// <summary>
 /// 获取购物车的所有商品
 /// </summary>
 protected void getCarts()
 {
  #region
  //string userID = "0";
  actions = 0;
  float amountPrice = 0;
  int amountScore = 0;
  if (Request.Cookies["Order1"] != null && Request.Cookies["Order1"].ToString() != "")
  {
  string cookiesValue = Request.Cookies["Order1"].Value.ToString();
  //解码
  cookiesValue = HttpUtility.UrlDecode(cookiesValue);
  Label2.Text = cookiesValue;
  string[] proRecord = cookiesValue.Split('|');
.....................

解决方案 »

  1.   

    购物车页面aspx.sc部分
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Common;public partial class order_Send : System.Web.UI.Page
    {
     private float price;
     public float Price
     {
      get { return price; }
      set { this.price = value; }
     }
     private float score;
     public float Score
     {
      get { return score; }
      set { this.score = value; }
     }
     private int actions;
     public int Actions
     {
      get { return actions; }
      set { this.actions = value; }
     } public int index; protected void Page_Load(object sender, EventArgs e)
     {
      if (!IsPostBack)
      {
      if (Request.QueryString["typeUrl"] != null)
      {
      string id = Request.QueryString["typeUrl"].ToString();
      txtUrl.Value = id;
      if (Request.Cookies["bw_user"] != null)
      {
      string userID = Request.Cookies["bw_user"]["user_id"].ToString();
      Label1.Text = userID;
      }
      getCarts();
      getDlCustom();
      }  } }
     /// <summary>
     /// 继续购物
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     protected void lbRetrnShop_Click(object sender, EventArgs e)
     {
      if (txtUrl.Value != "")
      {
      if (txtUrl.Value == "10")
      {
      Alert.location("../ProductListzt.aspx?type=9");
      }
      else
      {
      Alert.location("../feedback/dingzhi.aspx");
      }
      }
      else
      {
      Alert.location("../ProductListzt.aspx?type=9");
      } }
     /// <summary>
     /// 清空购物车
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     protected void lbDelectpro_Click(object sender, EventArgs e)
     {
      Tool.deleteCookie("Order1");
      this.dlProList.DataSource = "";
      this.dlProList.DataBind();
     } /// <summary>
     /// 保存总价
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     protected void labprice_PreRender(object sender, EventArgs e)
     {
      this.labprice.Text = price.ToString("0.00");
      HttpCookie myCookie = new HttpCookie("totalMoney");
      myCookie.Value = price.ToString();
      myCookie.Expires.AddMonths(1);
      HttpContext.Current.Response.Cookies.Add(myCookie);
     }
     protected void lbNext_Click(object sender, EventArgs e)
     {
      if (Request.Cookies["Order1"] != null && !Request.Cookies["Order1"].Value.Equals(""))
      {
      Response.Redirect("Default.aspx");
      }
      else
      {
      Jscript.JsAlert("请先购买商品!", this.Page);
      }
      //}
     } protected void lbUpdata_Click(object sender, EventArgs e)
     { } /// <summary>
     /// 获取购物车的所有商品
     /// </summary>
     protected void getCarts()
     {
      #region
      //string userID = "0";
      actions = 0;
      float amountPrice = 0;
      int amountScore = 0;
      if (Request.Cookies["Order1"] != null && Request.Cookies["Order1"].ToString() != "")
      {
      string cookiesValue = Request.Cookies["Order1"].Value.ToString();
      //解码
      cookiesValue = HttpUtility.UrlDecode(cookiesValue);
      Label2.Text = cookiesValue;
      string[] proRecord = cookiesValue.Split('|');
      DataTable dt = new DataTable();
      dt.Columns.Add("userId");
      dt.Columns.Add("proId");
      dt.Columns.Add("proName");
      dt.Columns.Add("ProNo");
      dt.Columns.Add("proSize");
      dt.Columns.Add("proNum");
      dt.Columns.Add("isCx");
      dt.Columns.Add("proItPrice");
      dt.Columns.Add("product_dh");
      dt.Columns.Add("proColor");
      dt.Columns.Add("score");
      dt.Columns.Add("proAmount");
      dt.Columns.Add("img");
      dt.Columns.Add("colorCate");
      dt.Columns.Add("index");
      dt.Columns.Add("proType");
      dt.Columns.Add("proCate");
      for (int i = 0; i < proRecord.Length; i++)
      {
      string[] proArr = proRecord[i].Split(',');
      if (proArr.Length == 5)
      {
      //Label2.Text = " " + proArr[0] + "," + proArr[1] + "," + proArr[2] + "," + proArr[3] + "," + proArr[4];
      if (proArr[2].ToString() == "1")
      {
      DataRow dr = dt.NewRow();
      Maticsoft.Model.dt_dingzhi progift = new Maticsoft.Model.dt_dingzhi();
      Maticsoft.BLL.dt_dingzhi bll = new Maticsoft.BLL.dt_dingzhi();
      progift.id = int.Parse(proArr[0].ToString());
      progift = bll.GetModel(progift.id);
      dr["proName"] = progift.name;
      dr["proId"] = proArr[0].ToString();
      dr["ProNo"] = proArr[2].ToString();
      dr["proNum"] = proArr[1].ToString();
      dr["isCx"] = proArr[2].ToString();
      dr["proItPrice"] = float.Parse(proArr[3].ToString()).ToString("0.00");
      dr["proSize"] = "定制酒水";
      dr["score"] = float.Parse(dr["proItPrice"].ToString()) * int.Parse(dr["proNum"].ToString());
      dr["proAmount"] = ((int.Parse(proArr[1].ToString())) * (float.Parse(proArr[3].ToString()))).ToString("0.00");
      amountPrice += float.Parse(dr["proAmount"].ToString());
      dr["img"] = "../" + progift.image;
      dr["proType"] = 1;
      dr["proCate"] = 1;
      dr["colorCate"] = 1;
      dr["index"] = i;
      dr["userId"] = "0";
      dt.Rows.Add(dr);
      }
      else if (proArr[2].ToString() == "3")
      {
      DataRow dr = dt.NewRow();
      Maticsoft.Model.dt_product progift = new Maticsoft.Model.dt_product();
      Maticsoft.BLL.dt_product bll = new Maticsoft.BLL.dt_product();
      progift.product_id = int.Parse(proArr[0].ToString());
      progift = bll.GetModel(progift.product_id);
      dr["proName"] = progift.product_name;
      dr["proId"] = proArr[0].ToString();
      dr["ProNo"] = proArr[2].ToString();
      dr["proNum"] = proArr[1].ToString();
      dr["isCx"] = proArr[2].ToString();  //dr["youhui"] = proArr[4].ToString();
      dr["proItPrice"] = float.Parse(proArr[3].ToString()).ToString();
      dr["product_dh"] = float.Parse(proArr[3].ToString()).ToString();
      dr["proSize"] = "积分兑换品";
      dr["score"] = float.Parse(dr["proItPrice"].ToString()) * int.Parse(dr["proNum"].ToString());
      dr["proAmount"] = ((int.Parse(proArr[1].ToString())) * (float.Parse(proArr[3].ToString()))).ToString("0.00");
      amountPrice += 0;
      // amountScore += int.Parse(dr["score"].ToString());
      dr["img"] = "../" + progift.product_pic;
      dr["proType"] = 1;
      dr["proCate"] = 1;
      dr["colorCate"] = 1;
      dr["userId"] = "0";
      dr["index"] = i;
      dt.Rows.Add(dr);
      }
      else if (proArr[2].ToString() == "2")
      {
      DataRow dr = dt.NewRow();
      Maticsoft.Model.dt_product progift = new Maticsoft.Model.dt_product();
      Maticsoft.BLL.dt_product bll = new Maticsoft.BLL.dt_product();
      progift.product_id = int.Parse(proArr[0].ToString());
      progift = bll.GetModel(progift.product_id);
      dr["proName"] = progift.product_name;
      dr["proId"] = proArr[0].ToString();
      dr["ProNo"] = proArr[2].ToString();
      dr["proNum"] = proArr[1].ToString();
      dr["isCx"] = proArr[2].ToString();  //dr["youhui"] = proArr[4].ToString();
      dr["proItPrice"] = float.Parse(proArr[3].ToString()).ToString();
      dr["product_dh"] = float.Parse(proArr[3].ToString()).ToString();
      dr["proSize"] = "非定制酒水";
      dr["score"] = float.Parse(dr["proItPrice"].ToString()) * int.Parse(dr["proNum"].ToString());
      dr["proAmount"] = ((int.Parse(proArr[1].ToString())) * (float.Parse(proArr[3].ToString()))).ToString("0.00");
      amountPrice += float.Parse(dr["proAmount"].ToString());
      // amountScore += int.Parse(dr["score"].ToString());
      dr["img"] = "../" + progift.product_pic;
      dr["proType"] = 1;
      dr["proCate"] = 1;
      dr["colorCate"] = 1;
      dr["userId"] = "0";
      dr["index"] = i;
      dt.Rows.Add(dr);
      }
      else if (proArr[2].ToString() == "4")
      {
      DataRow dr = dt.NewRow();
      Maticsoft.Model.dt_product progift = new Maticsoft.Model.dt_product();
      Maticsoft.BLL.dt_product bll = new Maticsoft.BLL.dt_product();
      progift.product_id = int.Parse(proArr[0].ToString());
      progift = bll.GetModel(progift.product_id);
      dr["proName"] = progift.product_name;
      dr["proId"] = proArr[0].ToString();
      dr["ProNo"] = proArr[2].ToString();
      dr["proNum"] = proArr[1].ToString();
      dr["isCx"] = proArr[2].ToString();  //dr["youhui"] = proArr[4].ToString();
      dr["proItPrice"] = float.Parse(proArr[3].ToString()).ToString();
      dr["product_dh"] = float.Parse(proArr[3].ToString()).ToString();
      dr["proSize"] = "包装商品";
      dr["score"] = float.Parse(dr["proItPrice"].ToString()) * int.Parse(dr["proNum"].ToString());
      dr["proAmount"] = ((int.Parse(proArr[1].ToString())) * (float.Parse(proArr[3].ToString()))).ToString("0.00");
      amountPrice += float.Parse(dr["proAmount"].ToString());
      // amountScore += int.Parse(dr["score"].ToString());
      dr["img"] = "../" + progift.product_pic;
      dr["proType"] = 1;
      dr["proCate"] = 1;
      dr["colorCate"] = 1;
      dr["userId"] = "0";
      dr["index"] = i;
      dt.Rows.Add(dr);
      }
      }
      HttpCookie myCookie = new HttpCookie("totalMoney");
      myCookie.Value = amountPrice.ToString();
      myCookie.Expires.AddMonths(1);
      HttpContext.Current.Response.Cookies.Add(myCookie);
      this.dlProList.DataSource = dt;
      this.dlProList.DataBind();
      this.price += float.Parse(amountPrice.ToString("0.00"));
      this.score += int.Parse(amountScore.ToString());
      }
      }  #endregion
     }
      

  2.   

    先理解其实现原理,看看petshop
    注册用户登陆后购买商品加入购物车时,购物车不能正常显示出来
    数据怎么保存的,是否与登录用户相关了
      

  3.   

    用户id写到cookie里
    string proRecord = subProNO + "," + num + "," + isx + "," + proprice + "," + userID;
      //可能有中文,进行预编码
      proRecord = HttpUtility.UrlEncode(proRecord);
      Tool.operateBuyCookie(Actions, proRecord, 100);
    HttpContext.Current.Response.Cookies.Add(myCookie);
    但怎么读出来的,不清楚啊
      

  4.   

    读取应该是
    HttpContext.Current.Request.Cookies然后调试看看,
      

  5.   

    帮不了你,当初我是用asp写的,购物车通过session实现的。
      

  6.   

    用txt翻cookies文件,
    用firefox/chrome/htmlpost 甚至Wireshark 查post数据都查出来了吧
    再给你2周半时间读本的asp.net入门都够了吧1年都搞不出来,你还是回去用"B盘"吧
      

  7.   


    HttpCookie myCookie = new HttpCookie(cookieName);//这里定义总的cookie名字
      //cookie 有效期 一个月
      myCookie.Expires.AddMonths(1);
      if (HttpContext.Current.Request.Cookies[cookieName] != null && !HttpContext.Current.Request.Cookies[cookieName].Value.Equals(""))
      {
      myCookie = HttpContext.Current.Request.Cookies[cookieName];
     // userCookie.Values["userName"] = Request.Form["txtUserName"];是不是要给它总的cookie的value起一个名字,如上面的userName,下面好像是给总的cookie赋值,我还没这么用过。
       myCookie.Value = myCookie.Value + "|" + cookieValue;  }
      else
      {
      myCookie.Value = cookieValue;
      }
    内容太多了,头晕。下面是我写的cookie,希望对你有用。
     if (Request.Cookies["UserInfo"] == null)
            {
                HttpCookie userCookie = new HttpCookie("UserInfo");
                userCookie.Values["userName"] = Request.Form["txtUserName"];
                userCookie.Values["count"] = Convert.ToString(1);
                userCookie.Expires = DateTime.Now.AddMonths(1);
                Response.Cookies.Add(userCookie);
            }
            else
            {
                int i = Convert.ToInt32(Request.Cookies["UserInfo"]["count"]) + 1;
                HttpCookie userCookie = Request.Cookies["UserInfo"];
                userCookie.Values["userName"] = Request.Form["txtUserName"];
                userCookie.Values["count"] = i.ToString();
                userCookie.Expires = DateTime.Now.AddMonths(1);
                Response.Cookies.Add(userCookie);
            }
            //为什么获取count值的时候,会比原始小于1
            Response.Write("用户名:" + Request.Cookies["UserInfo"]["userName"] + "<br>");
            Response.Write("上传文件时间:" + DateTime.Now.ToString() + "<br>");
            Response.Write("访问次数:" + Request.Cookies["UserInfo"]["count"]);
        }