一个Session的购物车做法(加分)

junlxiaybz 2010-07-02 10:35:45
现在遇到的问题就是购物车里面的物品的物品数量和价格的计算..
因为我是用 <asp:Repeater > 而标签是用 <label id='lbl_prize<%# Eval("id") %>'>
<%#Convert.ToDouble(Eval("price")).ToString("0.00")%></label>
绑定的...我现在根本无法获得他们的值.. 算不了总价格..和总数量... ..也没有朋友帮我解决一下!!
如何用JS..算出他们的价格和数量还有总价钱...并且就提交后可以获得到每个物品的数量和单价!
谢谢!
...全文
478 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
junlxiaybz 2010-07-02
  • 打赏
  • 举报
回复
帮忙看下吧.各位
mm51221 2010-07-02
  • 打赏
  • 举报
回复
顶、、、
熙风 2010-07-02
  • 打赏
  • 举报
回复
学习中··········
junlxiaybz 2010-07-02
  • 打赏
  • 举报
回复
var cbs=Repeater.getElementsByTagName("input");

获不到值的!
junlxiaybz 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhulong1111 的回复:]

JScript code

var Repeater=document.getElementById("<%=Repeater.ClientID%>";//使用clinetid,防止Repeater的id不一致
var cbs=Repeater.getElementsByTagName("input");
for(var i=0;i<cbs.length;i++)
{
if(cbs[i].……
[/Quote]
可以获得到label吗?
<label id='lbl_prize<%# Eval("id") %>'>
<%#Convert.ToDouble(Eval("price")).ToString("0.00")%></label>
junlxiaybz 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 orange_morning 的回复:]

购物车一般用cookie 总值的话后台绑定的时候循环一下就出来了啊
还是我没有理解lz的意思。。。。。
[/Quote]
现在问题就是算不了.价格数量...
那你在页面改变数量价格也要跟着变啊.
价格便..总价格也要变.!

问题就是这些算数上
orange_morning 2010-07-02
  • 打赏
  • 举报
回复
购物车一般用cookie 总值的话后台绑定的时候循环一下就出来了啊
还是我没有理解lz的意思。。。。。
zhulong1111 2010-07-02
  • 打赏
  • 举报
回复

var Repeater=document.getElementById("<%=Repeater.ClientID%>";//使用clinetid,防止Repeater的id不一致
var cbs=Repeater.getElementsByTagName("input");
for(var i=0;i<cbs.length;i++)
{
if(cbs[i].type=='checkbox'&&cbs[i].checked)
alert(cbs[i].value);
}

参考
junlxiaybz 2010-07-02
  • 打赏
  • 举报
回复
朋友们..来看看吧!
ganlianter 2010-07-02
  • 打赏
  • 举报
回复
我不用.net的控件所以不是最清楚,我只好说个大致的思路如果你记录在session里边,那肯定是一堆东西,看你的代码就是id和price是一一对应的两个session值咯,那就变成js的数组将其对应写入,然后根据数组的长度和每个产品id的在数组中的位置去对应的html控件中填写计算出来的价格
其实我作的电子商务是用cookie来做的
junlxiaybz 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhulong1111 的回复:]

js 变量repeater 循环行 获取列字 转换相加 在把值存放在一个hidden里面 就OK了
[/Quote]
能说相信点吗?
我现在一点思路都没有!
zhulong1111 2010-07-02
  • 打赏
  • 举报
回复
js 变量repeater 循环行 获取列字 转换相加 在把值存放在一个hidden里面 就OK了
pxh360395296 2010-07-02
  • 打赏
  • 举报
回复
购物车一般都用
COOKIES数组
tuzibai 2010-07-02
  • 打赏
  • 举报
回复
后台:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using XY.BLL;
using XY.Model;

public partial class pages_BuyBookCar : System.Web.UI.Page
{
#region
public System.Collections.Hashtable myHashTb = new System.Collections.Hashtable();
BLLgoods bbg = new BLLgoods();
//Modelgoods mg = new Modelgoods();
DataTable dtTable;
decimal price;
decimal allMoney;
Modelgoods mgs;

#endregion

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ContentPlaceHolder cph = (ContentPlaceHolder)this.Page.Master.Master.FindControl("ContentPlaceHolder_Main");
((Label)cph.FindControl("lblTitle")).Text = "购物车";

getInfo();
}
}

#region 开始购物车
public void getInfo()
{
if (Session["shop"] != null)
{
myHashTb = (Hashtable)Session["shop"];
}
if (Request["bookId"] != null)
{
//判断是否存在
mgs = bbg.GetModel(Request["bookId"].ToString()); //(XY.Model.Modelgoods)myHashTb[Request["bookId"].ToString()];
if (mgs != null)
{

if (!myHashTb.Contains(Request["bookId"]))
{
mgs.clickCount = 1;
myHashTb.Add(Request["bookId"], mgs);
}
else
{
mgs = (XY.Model.Modelgoods)myHashTb[Request["bookId"]];
mgs.clickCount += 1;
}
Session["shop"] = myHashTb;
}
}
if (Session["shop"] == null)
{
linkBtnClear.Visible = false;
linkBtnReNew.Visible = false;
linkBuy.Visible = false;
lblMoney.Visible = false;
linkBtnContinue.Text = "马上去购书";
}
GetCarDataBind();
}
#endregion

#region 绑定数据
public void GetCarDataBind()
{
//设置购物车内容的数据源
dtTable = new DataTable();
DataColumn column2 = new DataColumn("id"); //书籍名称
DataColumn column3 = new DataColumn("BookName"); //书籍名称
DataColumn column4 = new DataColumn("Num"); //数量
DataColumn column5 = new DataColumn("price"); //单价
DataColumn column6 = new DataColumn("totalPrice");//总价
dtTable.Columns.Add(column2);
dtTable.Columns.Add(column3);
dtTable.Columns.Add(column4);
dtTable.Columns.Add(column5);
dtTable.Columns.Add(column6);
DataRow row;
//对数据表中每一行进行遍历,给每一行的新列赋值
foreach (object key in myHashTb.Keys)
{

row = dtTable.NewRow();
XY.Model.Modelgoods model = (XY.Model.Modelgoods)myHashTb[key];
row["id"] = key.ToString();
row["BookName"] = model.bookName;
row["Num"] = model.clickCount;
row["price"] = Session["nowuser"] == null?model.marketPrice:model.memberPrice;
row["totalPrice"] = model.clickCount * (Session["nowuser"] == null ? model.marketPrice : model.memberPrice);
allMoney += (decimal)(model.clickCount * (Session["nowuser"] == null ? model.marketPrice : model.memberPrice));
dtTable.Rows.Add(row);
}
lblMoney.Text = "总价¥:";
lblMoney.Text += allMoney.ToString();
GridView1.DataSource = dtTable;
GridView1.DataBind();

}
#endregion

protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
myHashTb = (Hashtable)Session["Shop"];//获取其购物车
myHashTb.Remove(e.CommandArgument);
Session["Shop"] = myHashTb;//更新购物车
GetCarDataBind();
}

protected void LinkButton1_Click(object sender, EventArgs e)
{

}
#region //刷新购物车数据
protected void linkBtnReNew_Click(object sender, EventArgs e)
{
myHashTb = (Hashtable)Session["Shop"]; //获取其购物车
foreach (GridViewRow gvr in this.GridView1.Rows)
{
try
{
TextBox otb = (TextBox)gvr.FindControl("txtNum"); //找到用来输入数量的TextBox控件
int count = Int32.Parse(otb.Text);//获得用户输入的数量值
string BookID = gvr.Cells[0].Text;//得到该商品的ID代
mgs = (Modelgoods)myHashTb[BookID];
mgs.clickCount = count;
}
catch { };
}
Session["Shop"] = myHashTb;//更新购物车
GetCarDataBind();
}
#endregion
protected void linkBuy_Click(object sender, EventArgs e)
{
Response.Redirect("../web/Properties.aspx");
}
protected void linkBtnContinue_Click(object sender, EventArgs e)
{
Response.Redirect("../index.aspx");
}
protected void linkBtnClear_Click(object sender, EventArgs e)
{
Session["shop"] = null;
Response.Redirect("BuyBookCar.aspx");
}
}
这是我以前做过的一个,可能很乱。希望对你有帮助。。。

太多了,一次没粘完。。。。
tuzibai 2010-07-02
  • 打赏
  • 举报
回复


前台:
<%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPageSubBefore.master" Theme="shopCar" AutoEventWireup="true" CodeFile="BuyBookCar.aspx.cs" Inherits="pages_BuyBookCar" Title="无标题页" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<style type="text/css">
.style1
{
width: 303px;
}
.style2
{
width: 66px;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<center>
</center>
<asp:Label ID="lblMoney" runat="server"></asp:Label>
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Height="16px" Width="528px" EmptyDataText="你还没有购买任何书籍!">
<Columns>
<asp:BoundField DataField="id" HeaderText="ID">
<HeaderStyle CssClass="gv_hidden" />
<ItemStyle CssClass="gv_hidden" />
</asp:BoundField>
<asp:TemplateField HeaderText="书名">

<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("bookName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("bookName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="数量" ItemStyle-Width="120px" >
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Num") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="txtNum" runat="server" Height="20px" Width="82px"
Text='<%# Bind("Num") %>'></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="txtNum" ErrorMessage="×"
ValidationExpression="^\+?[1-9][0-9]*$"></asp:RegularExpressionValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="单价">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("price") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("price") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="总价">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("totalPrice") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("totalPrice") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server"
CommandArgument=' <%# Eval("ID") %> '
onclientclick="return confirm('你确定要删除该书籍吗?')" OnCommand="LinkButton1_Command"
onclick="LinkButton1_Click">删除</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<table style="width:528px">
<tr>
<td align="right" class="style1">
<asp:LinkButton ID="linkBtnReNew" runat="server" onclick="linkBtnReNew_Click">更新购物车数据</asp:LinkButton>
</td>
<td align="center">
<asp:LinkButton ID="linkBtnContinue" runat="server"
onclick="linkBtnContinue_Click">继续购物</asp:LinkButton>
</td>
<td class="style2">
<asp:LinkButton ID="linkBtnClear" runat="server"
onclientclick="return confirm("你确定要清空购物车吗?")"
onclick="linkBtnClear_Click">清空购物车</asp:LinkButton>
</td>
<td>
<asp:LinkButton ID="linkBuy" runat="server" onclick="linkBuy_Click">前往服务台</asp:LinkButton>
</td>
</tr>
<tr>
<td class="style1">
 </td>
<td colspan="2">
 </td>
<td>
 </td>
</tr>
<tr>
<td class="style1">
 </td>
<td colspan="2">
 </td>
<td>
 </td>
</tr>
</table>
</asp:Content>

Assassin_ 2010-07-02
  • 打赏
  • 举报
回复
如果你项目现在还有修改的余地的话。建议你用Seeeion+DataTable做吧。、很简单、
diehuac 2010-07-02
  • 打赏
  • 举报
回复
直接去session里面计算吧
linuxzhangsl 2010-07-02
  • 打赏
  • 举报
回复
购物车不是用hashtable表来做的吗
yb00k 2010-07-02
  • 打赏
  • 举报
回复
购物车 计算总价 这个不是你这样操作的撒,一般 如上面一位所说的 通过存储到COOKIE然后 保存起来,然后计算。至于你说的改变数量总价也更着计算这个很简单了用JS来操作了。

repeater 你主键是唯一的 你就把 控件名称比如 单价的 id="unit<%# Eval("ID")%>" 总价 id="sum<%# Eval("ID")%>"

在输入框那里 input 触发事件那里 传递参数到js就传递 <%# Eval("ID")%>" 过去,你通过js document
就可以获取到 这3个控件的值 然后计算赋值就是了。

不会就把 你把你的HTML源代码贴出来
qwerrewq888 2010-07-02
  • 打赏
  • 举报
回复
学习了

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧