[ASPX]
[CS]
[CHttpHeler]
演示:http://clover.dollarscn.com/scripts/shopcart/?act=add&id=1102 :)
<%@ Page Language="C#" MasterPageFile="~/Scripts/ShopCart/ShopCart.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" Title="购物车" %>
<%@ Import Namespace="AW.Components.Helpers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<asp:MultiView ID="MultiView1" runat="server">
<asp:View ID="View1" runat="server">
<script language="javascript" type="text/javascript" src='<%= this.ResolveUrl("~/Utility/Functions.js") %>'></script>
<script language="javascript" type="text/javascript">
var key = '<%= Key %>';
function remove(pID){
var v = getCookie(key)==null?"":getCookie(key);
_Default.RemoveProductFromOrder(pID,v,remove_Callback);
}
function remove_Callback(res){
if(res.error!=null)alert(res.error);
else{
var tr = document.getElementById("tr_" + res.value.PID.toString());
tr.style.display = "none";
deleteCookie(key,"/","." + location.host);
setCookie(key,res.value.NVC,null,"/","."+location.host);
calcMoney();
}
}
function modify(pID,num){
var v = getCookie(key)==null?"":getCookie(key);
_Default.ModifyProductNumber(pID,num,v,modify_Callback);
}
function modify_Callback(res){
deleteCookie(key,"/","." + location.host);
setCookie(key,res.value.NVC,null,"/","."+location.host);
var total = document.getElementById("txtSubTotal_" + res.value.PID.toString());
var price = document.getElementById("txtVipPrice_" + res.value.PID.toString());
total.value = Round(parseFloat(parseInt(res.value.TOTAL) * parseFloat(price.value)),2);
calcMoney();
}
function modifyAll(){
}
function clearCart(){
if (!confirm('确定要清空购物车吗?')) return;
var tb = document.getElementById("tbOrder");
for(var i=1;i<tb.rows.length;i++){
var tr = tb.rows.item(i);
if(tr.id.indexOf("_")!=-1 && tr.style.display!="none"){
tr.style.display = 'none';
}
}
deleteCookie(key,"/","." + location.host);
var ctlTotalNum = document.getElementById("<%=lbTotalNum.ClientID %>");
var ctlTotalMoney = document.getElementById("<%=lbTotalMoney.ClientID %>");
var ctlDiscount = document.getElementById("<%=lbDiscount.ClientID %>");
ctlTotalNum.innerHTML = "0";
ctlTotalMoney.innerHTML = "0";
ctlDiscount.innerHTML = "0";
}
function calcMoney(){
var ctlNums = document.getElementsByName("txtNumber");
var ctlPrices = document.getElementsByName("txtPrice");
var ctlVipPrices = document.getElementsByName("txtVipPrice");
var ctlSubTotal = document.getElementsByName("txtSubTotal");
var ctlTotalNum = document.getElementById("<%=lbTotalNum.ClientID %>");
var ctlTotalMoney = document.getElementById("<%=lbTotalMoney.ClientID %>");
var ctlDiscount = document.getElementById("<%=lbDiscount.ClientID %>");
var totalNum = 0;
var subTotal = 0;
var subTotalVip = 0;
var totalMoney = 0;
var totalVipMoney = 0;
for(var i=0;i<ctlNums.length;i++){
totalNum += parseInt(ctlNums[i].value);
subTotal = parseFloat(totalNum * parseFloat(ctlPrices[i].value));
subTotalVip = parseFloat(totalNum * parseFloat(ctlVipPrices[i].value));
totalMoney += subTotal;
totalVipMoney += subTotalVip;
ctlSubTotal.value = subTotalVip.toString();
}
ctlTotalNum.innerHTML = Round(totalNum,2);
ctlTotalMoney.innerHTML = Round(totalVipMoney,2);
ctlDiscount.innerHTML = Round((totalMoney - totalVipMoney),2);
}
function Round(a_Num , a_Bit){
return (Math.round(a_Num * Math.pow (10 , a_Bit)) / Math.pow(10 , a_Bit)).toString() ;
}
</script>
<div id="shopcart">
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0" background="../../Icon/ShopCart/shopC_syp_5.gif">
<tbody>
<tr>
<td width="12">
<img height="72" src="../../Icon/ShopCart/shopC_syp_1.gif" width="12" /></td>
<td>
<img height="72" src="../../Icon/ShopCart/shopC_6.gif" width="176" /></td>
<td valign="bottom" align="right">
<img height="29" src="../../Icon/ShopCart/shopC_4.gif" width="324" /></td>
<td width="10" align="right" valign="bottom">
<img height="72" src="../../Icon/ShopCart/shopC_syp_3.gif" width="10" /></td>
</tr>
</tbody>
</table>
<table class="meun_bg" cellspacing="0" cellpadding="0" width="540" align="center"
border="0">
<tbody>
<tr>
<td align="right">
<img height="28" src="../../Icon/ShopCart/shopC_syx_01.gif" width="93" border="0" /></td>
<td>
<img height="32" src="../../Icon/ShopCart/shopC_sy_8.gif" width="55" /></td>
<td>
<img height="28" src="../../Icon/ShopCart/shopC_syx_02.gif" width="112" border="0" /></td>
<td>
<img height="32" src="../../Icon/ShopCart/shopC_sy_8.gif" width="55" /></td>
<td>
<img height="22" src="../../Icon/ShopCart/shopC_syx_03.gif" width="109" border="0" /></td>
</tr>
</tbody>
</table>
<table cellspacing="0" cellpadding="0" width="778" align="center" bgcolor="#fafafa"
border="0">
<tbody>
<tr>
<td>
<img height="41" hspace="8" src="../../Icon/ShopCart/shopc_z1.gif" width="143" /></td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="0" width="96%" align="center" border="0">
<tbody>
<tr align="right" bgcolor="#fafafa">
<td>
<img height="15" src="../../Icon/ShopCart/shopc_syx_j.gif" width="771" /></td>
</tr>
<tr align="right" bgcolor="#fafafa">
<td class="boder_center_bg">
<table cellspacing="1" width="95%" align="center" border="0" id="tbOrder">
<tbody>
<tr class="boder_topbg" align="center">
<td>
商品名称</td>
<td>
单 位</td>
<td>
数 量</td>
<td>
市场价(元)</td>
<td>
会员价(元)</td>
<td>
小 计(元)</td>
<td width="8%">
操作</td>
</tr>
<asp:Repeater ID="rptView" runat="server">
<ItemTemplate>
<tr align="center" bgcolor="#f9f9f9" id="tr_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>">
<td align="left">
<asp:HyperLink Target="_blank" NavigateUrl='<%# "~/" + ((ORDERDETAIL)Container.DataItem).Product.ChannelID.ToString() + "_" + ((ORDERDETAIL)Container.DataItem).Product.ID.ToString() + ".aspx" %>'
Text='<%# ((ORDERDETAIL)Container.DataItem).Product.Name %>' runat="server" /></td>
<td>
<%# String.IsNullOrEmpty(((ORDERDETAIL)Container.DataItem).Product.Unit) ? "个" : ((ORDERDETAIL)Container.DataItem).Product.Unit %>
</td>
<td>
<input style="text-align: right;" onbeforepaste="clipboarddata.setdata('text',clipboarddata.getdata('text').replace(/[^\d]/g,''))"
id="txtNum_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>" onkeyup="value=value.replace(/[^\d]/g,'');"
onblur="if(this.value.length==0)this.value=0;modify(<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>,value);"
maxlength="2" size="4" value="<%# ((ORDERDETAIL)Container.DataItem).Number %>"
name="txtNumber" /></td>
<td style="padding-left: 20px" align="right">
<del>
<%# ((ORDERDETAIL)Container.DataItem).Product.Price %>
</del>
<input name='txtPrice' id="txtPrice_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>"
type="hidden" value='<%# ((ORDERDETAIL)Container.DataItem).Product.Price %>' />
</td>
<td style="padding-left: 20px" align="right">
<input style="text-align: right;" name='txtVipPrice' id="txtVipPrice_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>"
type="hidden" value='<%# ((ORDERDETAIL)Container.DataItem).Product.VipPrice %>' />
<%# ((ORDERDETAIL)Container.DataItem).Product.VipPrice %>
</td>
<td style="padding-left: 20px" align="right">
<input style="text-align: right;border: none 0px white; background-color: White;" size="4" name='txtSubTotal' id="txtSubTotal_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>"
type="text" readonly="readonly" value='<%# ((ORDERDETAIL)Container.DataItem).Product.VipPrice * ((ORDERDETAIL)Container.DataItem).Number %>' /></td>
<td>
<a href="javascript:remove(<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>);"><font
color="#ff0000">删除</font></a></td>
</tr>
</ItemTemplate>
</asp:Repeater>
<tr align="right" bgcolor="#f9f9f9">
<td colspan="7">
购物车中共有
<asp:Label ID="lbTotalNum" ForeColor="red" runat="server" />
件商品,共计 <font class="font_red">¥<asp:Label ID="lbTotalMoney" runat="server" />
元</font>(不包括邮费) 您节省了<font class="font_red">¥<asp:Label ID="lbDiscount" runat="server" /></font>
</td>
</tr>
<tr align="left" bgcolor="#f9f9f9">
<td colspan="7">
<img style="width: 104px; height: 27px; cursor: pointer;" onclick="modifyAll();"
height="23" alt="单击这里保存您所修改的商品数量" width="85" src="../../Icon/ShopCart/shopc_13_02.gif"
border="0" />
<img style="cursor: pointer" onclick="clearCart();" height="27" alt="单击这里清空所有购买的商品"
src="../../Icon/ShopCart/shopc_13_03.gif" width="104" /> </td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr align="right" bgcolor="#fafafa">
<td>
<img height="15" src="../../Icon/ShopCart/shopc_20.gif" width="771" /></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td align="right">
<img style="cursor: hand" onclick="javascript:window.close();" height="42" alt="点击继续购买您喜欢的其它商品"
src="../../Icon/ShopCart/shopc_13_01.gif" width="143" vspace="10" />
<img style="cursor: hand" onclick="location.href='./ClientInfo.aspx';" height="42"
alt="点击去收银台结帐" hspace="10" src="../../Icon/ShopCart/shopc_13.gif" width="143"
vspace="10" id="IMG1" /></td>
</tr>
<tr>
<td class="style2" align="center">
</td>
</tr>
</tbody>
<tr>
<td>
</td>
</tr>
</table>
</div>
</asp:View>
</asp:MultiView>
<br />
<br />
</asp:Content>
CodeFile="Default.aspx.cs" Inherits="_Default" Title="购物车" %>
<%@ Import Namespace="AW.Components.Helpers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<asp:MultiView ID="MultiView1" runat="server">
<asp:View ID="View1" runat="server">
<script language="javascript" type="text/javascript" src='<%= this.ResolveUrl("~/Utility/Functions.js") %>'></script>
<script language="javascript" type="text/javascript">
var key = '<%= Key %>';
function remove(pID){
var v = getCookie(key)==null?"":getCookie(key);
_Default.RemoveProductFromOrder(pID,v,remove_Callback);
}
function remove_Callback(res){
if(res.error!=null)alert(res.error);
else{
var tr = document.getElementById("tr_" + res.value.PID.toString());
tr.style.display = "none";
deleteCookie(key,"/","." + location.host);
setCookie(key,res.value.NVC,null,"/","."+location.host);
calcMoney();
}
}
function modify(pID,num){
var v = getCookie(key)==null?"":getCookie(key);
_Default.ModifyProductNumber(pID,num,v,modify_Callback);
}
function modify_Callback(res){
deleteCookie(key,"/","." + location.host);
setCookie(key,res.value.NVC,null,"/","."+location.host);
var total = document.getElementById("txtSubTotal_" + res.value.PID.toString());
var price = document.getElementById("txtVipPrice_" + res.value.PID.toString());
total.value = Round(parseFloat(parseInt(res.value.TOTAL) * parseFloat(price.value)),2);
calcMoney();
}
function modifyAll(){
}
function clearCart(){
if (!confirm('确定要清空购物车吗?')) return;
var tb = document.getElementById("tbOrder");
for(var i=1;i<tb.rows.length;i++){
var tr = tb.rows.item(i);
if(tr.id.indexOf("_")!=-1 && tr.style.display!="none"){
tr.style.display = 'none';
}
}
deleteCookie(key,"/","." + location.host);
var ctlTotalNum = document.getElementById("<%=lbTotalNum.ClientID %>");
var ctlTotalMoney = document.getElementById("<%=lbTotalMoney.ClientID %>");
var ctlDiscount = document.getElementById("<%=lbDiscount.ClientID %>");
ctlTotalNum.innerHTML = "0";
ctlTotalMoney.innerHTML = "0";
ctlDiscount.innerHTML = "0";
}
function calcMoney(){
var ctlNums = document.getElementsByName("txtNumber");
var ctlPrices = document.getElementsByName("txtPrice");
var ctlVipPrices = document.getElementsByName("txtVipPrice");
var ctlSubTotal = document.getElementsByName("txtSubTotal");
var ctlTotalNum = document.getElementById("<%=lbTotalNum.ClientID %>");
var ctlTotalMoney = document.getElementById("<%=lbTotalMoney.ClientID %>");
var ctlDiscount = document.getElementById("<%=lbDiscount.ClientID %>");
var totalNum = 0;
var subTotal = 0;
var subTotalVip = 0;
var totalMoney = 0;
var totalVipMoney = 0;
for(var i=0;i<ctlNums.length;i++){
totalNum += parseInt(ctlNums[i].value);
subTotal = parseFloat(totalNum * parseFloat(ctlPrices[i].value));
subTotalVip = parseFloat(totalNum * parseFloat(ctlVipPrices[i].value));
totalMoney += subTotal;
totalVipMoney += subTotalVip;
ctlSubTotal.value = subTotalVip.toString();
}
ctlTotalNum.innerHTML = Round(totalNum,2);
ctlTotalMoney.innerHTML = Round(totalVipMoney,2);
ctlDiscount.innerHTML = Round((totalMoney - totalVipMoney),2);
}
function Round(a_Num , a_Bit){
return (Math.round(a_Num * Math.pow (10 , a_Bit)) / Math.pow(10 , a_Bit)).toString() ;
}
</script>
<div id="shopcart">
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0" background="../../Icon/ShopCart/shopC_syp_5.gif">
<tbody>
<tr>
<td width="12">
<img height="72" src="../../Icon/ShopCart/shopC_syp_1.gif" width="12" /></td>
<td>
<img height="72" src="../../Icon/ShopCart/shopC_6.gif" width="176" /></td>
<td valign="bottom" align="right">
<img height="29" src="../../Icon/ShopCart/shopC_4.gif" width="324" /></td>
<td width="10" align="right" valign="bottom">
<img height="72" src="../../Icon/ShopCart/shopC_syp_3.gif" width="10" /></td>
</tr>
</tbody>
</table>
<table class="meun_bg" cellspacing="0" cellpadding="0" width="540" align="center"
border="0">
<tbody>
<tr>
<td align="right">
<img height="28" src="../../Icon/ShopCart/shopC_syx_01.gif" width="93" border="0" /></td>
<td>
<img height="32" src="../../Icon/ShopCart/shopC_sy_8.gif" width="55" /></td>
<td>
<img height="28" src="../../Icon/ShopCart/shopC_syx_02.gif" width="112" border="0" /></td>
<td>
<img height="32" src="../../Icon/ShopCart/shopC_sy_8.gif" width="55" /></td>
<td>
<img height="22" src="../../Icon/ShopCart/shopC_syx_03.gif" width="109" border="0" /></td>
</tr>
</tbody>
</table>
<table cellspacing="0" cellpadding="0" width="778" align="center" bgcolor="#fafafa"
border="0">
<tbody>
<tr>
<td>
<img height="41" hspace="8" src="../../Icon/ShopCart/shopc_z1.gif" width="143" /></td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="0" width="96%" align="center" border="0">
<tbody>
<tr align="right" bgcolor="#fafafa">
<td>
<img height="15" src="../../Icon/ShopCart/shopc_syx_j.gif" width="771" /></td>
</tr>
<tr align="right" bgcolor="#fafafa">
<td class="boder_center_bg">
<table cellspacing="1" width="95%" align="center" border="0" id="tbOrder">
<tbody>
<tr class="boder_topbg" align="center">
<td>
商品名称</td>
<td>
单 位</td>
<td>
数 量</td>
<td>
市场价(元)</td>
<td>
会员价(元)</td>
<td>
小 计(元)</td>
<td width="8%">
操作</td>
</tr>
<asp:Repeater ID="rptView" runat="server">
<ItemTemplate>
<tr align="center" bgcolor="#f9f9f9" id="tr_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>">
<td align="left">
<asp:HyperLink Target="_blank" NavigateUrl='<%# "~/" + ((ORDERDETAIL)Container.DataItem).Product.ChannelID.ToString() + "_" + ((ORDERDETAIL)Container.DataItem).Product.ID.ToString() + ".aspx" %>'
Text='<%# ((ORDERDETAIL)Container.DataItem).Product.Name %>' runat="server" /></td>
<td>
<%# String.IsNullOrEmpty(((ORDERDETAIL)Container.DataItem).Product.Unit) ? "个" : ((ORDERDETAIL)Container.DataItem).Product.Unit %>
</td>
<td>
<input style="text-align: right;" onbeforepaste="clipboarddata.setdata('text',clipboarddata.getdata('text').replace(/[^\d]/g,''))"
id="txtNum_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>" onkeyup="value=value.replace(/[^\d]/g,'');"
onblur="if(this.value.length==0)this.value=0;modify(<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>,value);"
maxlength="2" size="4" value="<%# ((ORDERDETAIL)Container.DataItem).Number %>"
name="txtNumber" /></td>
<td style="padding-left: 20px" align="right">
<del>
<%# ((ORDERDETAIL)Container.DataItem).Product.Price %>
</del>
<input name='txtPrice' id="txtPrice_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>"
type="hidden" value='<%# ((ORDERDETAIL)Container.DataItem).Product.Price %>' />
</td>
<td style="padding-left: 20px" align="right">
<input style="text-align: right;" name='txtVipPrice' id="txtVipPrice_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>"
type="hidden" value='<%# ((ORDERDETAIL)Container.DataItem).Product.VipPrice %>' />
<%# ((ORDERDETAIL)Container.DataItem).Product.VipPrice %>
</td>
<td style="padding-left: 20px" align="right">
<input style="text-align: right;border: none 0px white; background-color: White;" size="4" name='txtSubTotal' id="txtSubTotal_<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>"
type="text" readonly="readonly" value='<%# ((ORDERDETAIL)Container.DataItem).Product.VipPrice * ((ORDERDETAIL)Container.DataItem).Number %>' /></td>
<td>
<a href="javascript:remove(<%# ((ORDERDETAIL)Container.DataItem).Product.ID %>);"><font
color="#ff0000">删除</font></a></td>
</tr>
</ItemTemplate>
</asp:Repeater>
<tr align="right" bgcolor="#f9f9f9">
<td colspan="7">
购物车中共有
<asp:Label ID="lbTotalNum" ForeColor="red" runat="server" />
件商品,共计 <font class="font_red">¥<asp:Label ID="lbTotalMoney" runat="server" />
元</font>(不包括邮费) 您节省了<font class="font_red">¥<asp:Label ID="lbDiscount" runat="server" /></font>
</td>
</tr>
<tr align="left" bgcolor="#f9f9f9">
<td colspan="7">
<img style="width: 104px; height: 27px; cursor: pointer;" onclick="modifyAll();"
height="23" alt="单击这里保存您所修改的商品数量" width="85" src="../../Icon/ShopCart/shopc_13_02.gif"
border="0" />
<img style="cursor: pointer" onclick="clearCart();" height="27" alt="单击这里清空所有购买的商品"
src="../../Icon/ShopCart/shopc_13_03.gif" width="104" /> </td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr align="right" bgcolor="#fafafa">
<td>
<img height="15" src="../../Icon/ShopCart/shopc_20.gif" width="771" /></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td align="right">
<img style="cursor: hand" onclick="javascript:window.close();" height="42" alt="点击继续购买您喜欢的其它商品"
src="../../Icon/ShopCart/shopc_13_01.gif" width="143" vspace="10" />
<img style="cursor: hand" onclick="location.href='./ClientInfo.aspx';" height="42"
alt="点击去收银台结帐" hspace="10" src="../../Icon/ShopCart/shopc_13.gif" width="143"
vspace="10" id="IMG1" /></td>
</tr>
<tr>
<td class="style2" align="center">
</td>
</tr>
</tbody>
<tr>
<td>
</td>
</tr>
</table>
</div>
</asp:View>
</asp:MultiView>
<br />
<br />
</asp:Content>
[CS]
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 AW.Components;
using AjaxPro;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using AW.Components.Helpers;
public partial class _Default : System.Web.UI.Page {
protected string Key = "ORDERDETAIL_" + CContext.Current.SiteOwnerUserID.ToString();
protected void Page_Load(object sender, EventArgs e) {
Utility.RegisterTypeForAjax(typeof(_Default));
string action = Request["Act"];
int id;
if (string.IsNullOrEmpty(action))
action = "list";
if (int.TryParse(Request["ID"], out id)) {
if (action == "add") {
CProduct prodcut = CProducts.GetProduct(id, CContext.Current.SiteOwnerUserID);
if (prodcut == null) {
CJS.AlertAndGoUrl("此商品已经被删除!", Request.Url.AbsolutePath);
return;
}
AddProductToOrder(id, 1);
Response.Redirect(Request.Url.AbsolutePath, true);
return;
}
}
rptView.DataSource = GetOrders();
rptView.DataBind();
MultiView1.ActiveViewIndex = 0;
}
public List<ORDERDETAIL> GetOrders() {
HttpCookie cookie;
cookie = Request.Cookies[Key] == null ? new HttpCookie(Key) : Request.Cookies[Key];
NameValueCollection nvc = CHttpHelper.Base64Decode(cookie.Value);
List<ORDERDETAIL> orders = new List<ORDERDETAIL>();
int totalNum = 0;
double totalMoney = 0.00;
double totalVipMoney = 0.00;
for (int i = 0; i < nvc.Count; i++) {
ORDERDETAIL ord = new ORDERDETAIL(int.Parse(nvc.Keys[i]), int.Parse(nvc[i]));
orders.Add(ord);
totalNum += int.Parse(nvc[i]);
totalMoney += (ord.Number * (ord.Product==null?0:ord.Product.Price));
totalVipMoney += (ord.Number * (ord.Product==null?0:ord.Product.VipPrice));
}
lbTotalNum.Text = totalNum.ToString();
lbTotalMoney.Text = totalVipMoney.ToString("0.00");
lbDiscount.Text = (totalMoney - totalVipMoney).ToString("0.00");
return orders;
}
public void AddProductToOrder(int pID, int num) {
HttpCookie cookie;
cookie = Request.Cookies[Key] == null ? new HttpCookie(Key) : Request.Cookies[Key];
cookie.Path = Request.ApplicationPath;
cookie.Domain = "." + Request.Url.Host;
NameValueCollection nvc = CHttpHelper.Base64Decode(cookie.Value);
if (nvc[pID.ToString()] != null)
nvc[pID.ToString()] = (int.Parse(nvc[pID.ToString()]) + num).ToString();
else
nvc.Add(pID.ToString(), num.ToString());
cookie.Value = CHttpHelper.Base64Encode(nvc);
Response.AppendCookie(cookie);
}
[AjaxMethod]
public RESUTLINFO ModifyProductNumber(int pID, int num, string cookieStr) {
NameValueCollection nvc = CHttpHelper.Base64Decode(cookieStr);
nvc[pID.ToString()] = num.ToString();
return new RESUTLINFO(pID, int.Parse(nvc[pID.ToString()]),CHttpHelper.Base64Encode(nvc));
}
[AjaxMethod]
public RESUTLINFO RemoveProductFromOrder(int pID, string cookieStr) {
NameValueCollection nvc = CHttpHelper.Base64Decode(cookieStr);
nvc.Remove(pID.ToString());
return new RESUTLINFO(pID, CHttpHelper.Base64Encode(nvc));
}
}
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 AW.Components;
using AjaxPro;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using AW.Components.Helpers;
public partial class _Default : System.Web.UI.Page {
protected string Key = "ORDERDETAIL_" + CContext.Current.SiteOwnerUserID.ToString();
protected void Page_Load(object sender, EventArgs e) {
Utility.RegisterTypeForAjax(typeof(_Default));
string action = Request["Act"];
int id;
if (string.IsNullOrEmpty(action))
action = "list";
if (int.TryParse(Request["ID"], out id)) {
if (action == "add") {
CProduct prodcut = CProducts.GetProduct(id, CContext.Current.SiteOwnerUserID);
if (prodcut == null) {
CJS.AlertAndGoUrl("此商品已经被删除!", Request.Url.AbsolutePath);
return;
}
AddProductToOrder(id, 1);
Response.Redirect(Request.Url.AbsolutePath, true);
return;
}
}
rptView.DataSource = GetOrders();
rptView.DataBind();
MultiView1.ActiveViewIndex = 0;
}
public List<ORDERDETAIL> GetOrders() {
HttpCookie cookie;
cookie = Request.Cookies[Key] == null ? new HttpCookie(Key) : Request.Cookies[Key];
NameValueCollection nvc = CHttpHelper.Base64Decode(cookie.Value);
List<ORDERDETAIL> orders = new List<ORDERDETAIL>();
int totalNum = 0;
double totalMoney = 0.00;
double totalVipMoney = 0.00;
for (int i = 0; i < nvc.Count; i++) {
ORDERDETAIL ord = new ORDERDETAIL(int.Parse(nvc.Keys[i]), int.Parse(nvc[i]));
orders.Add(ord);
totalNum += int.Parse(nvc[i]);
totalMoney += (ord.Number * (ord.Product==null?0:ord.Product.Price));
totalVipMoney += (ord.Number * (ord.Product==null?0:ord.Product.VipPrice));
}
lbTotalNum.Text = totalNum.ToString();
lbTotalMoney.Text = totalVipMoney.ToString("0.00");
lbDiscount.Text = (totalMoney - totalVipMoney).ToString("0.00");
return orders;
}
public void AddProductToOrder(int pID, int num) {
HttpCookie cookie;
cookie = Request.Cookies[Key] == null ? new HttpCookie(Key) : Request.Cookies[Key];
cookie.Path = Request.ApplicationPath;
cookie.Domain = "." + Request.Url.Host;
NameValueCollection nvc = CHttpHelper.Base64Decode(cookie.Value);
if (nvc[pID.ToString()] != null)
nvc[pID.ToString()] = (int.Parse(nvc[pID.ToString()]) + num).ToString();
else
nvc.Add(pID.ToString(), num.ToString());
cookie.Value = CHttpHelper.Base64Encode(nvc);
Response.AppendCookie(cookie);
}
[AjaxMethod]
public RESUTLINFO ModifyProductNumber(int pID, int num, string cookieStr) {
NameValueCollection nvc = CHttpHelper.Base64Decode(cookieStr);
nvc[pID.ToString()] = num.ToString();
return new RESUTLINFO(pID, int.Parse(nvc[pID.ToString()]),CHttpHelper.Base64Encode(nvc));
}
[AjaxMethod]
public RESUTLINFO RemoveProductFromOrder(int pID, string cookieStr) {
NameValueCollection nvc = CHttpHelper.Base64Decode(cookieStr);
nvc.Remove(pID.ToString());
return new RESUTLINFO(pID, CHttpHelper.Base64Encode(nvc));
}
}
[CHttpHeler]
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Web;
namespace AW.Components.Helpers {
public class CHttpHelper {
private CHttpHelper() { }
GetString
public static string Base64Encode(NameValueCollection nvc) {
return Convert.ToBase64String(Encoding.Default.GetBytes(GetString(nvc)), Base64FormattingOptions.None);
}
public static NameValueCollection Base64Decode(string base64String) {
if (string.IsNullOrEmpty(base64String))
return new NameValueCollection();
return HttpUtility.ParseQueryString(GetString(HttpUtility.UrlDecode(base64String)));
}
}
public struct ORDERDETAIL {
public ORDERDETAIL(int pID, int num) {
Product = CProducts.GetProduct(pID, CContext.Current.SiteOwnerUserID);
Number = num;
}
public CProduct Product;
public int Number;
public void ParseFromString(string str) {
}
public int ProudctID {
get {
return Product == null ? 0 : Product.ID;
}
}
public override string ToString() {
return ProudctID + ":" + Number.ToString();
}
}
public struct RESUTLINFO {
public string NVC;
public int PID;
public int TOTAL;
public RESUTLINFO(int pID, string nvc) {
PID = pID;
NVC = nvc;
TOTAL = 0;
}
public RESUTLINFO(int pID, int total, string nvc) {
PID = pID;
NVC = nvc;
TOTAL = total;
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Web;
namespace AW.Components.Helpers {
public class CHttpHelper {
private CHttpHelper() { }
GetString
public static string Base64Encode(NameValueCollection nvc) {
return Convert.ToBase64String(Encoding.Default.GetBytes(GetString(nvc)), Base64FormattingOptions.None);
}
public static NameValueCollection Base64Decode(string base64String) {
if (string.IsNullOrEmpty(base64String))
return new NameValueCollection();
return HttpUtility.ParseQueryString(GetString(HttpUtility.UrlDecode(base64String)));
}
}
public struct ORDERDETAIL {
public ORDERDETAIL(int pID, int num) {
Product = CProducts.GetProduct(pID, CContext.Current.SiteOwnerUserID);
Number = num;
}
public CProduct Product;
public int Number;
public void ParseFromString(string str) {
}
public int ProudctID {
get {
return Product == null ? 0 : Product.ID;
}
}
public override string ToString() {
return ProudctID + ":" + Number.ToString();
}
}
public struct RESUTLINFO {
public string NVC;
public int PID;
public int TOTAL;
public RESUTLINFO(int pID, string nvc) {
PID = pID;
NVC = nvc;
TOTAL = 0;
}
public RESUTLINFO(int pID, int total, string nvc) {
PID = pID;
NVC = nvc;
TOTAL = total;
}
}
}
演示:http://clover.dollarscn.com/scripts/shopcart/?act=add&id=1102 :)