使用cookie制作购物车

思路:使用cookie存储产品ID和客户的订购量,其它的东西根据id值去库里面取

先看看cookie类,专门用于插入产品、更新订购量、删除产品

 

ContractedBlock.gifCode

把产品添加到购物车的代码:

ContractedBlock.gifExpandedBlockStart.gifCode
public class CCookieShoppingCart
{
    
public CCookieShoppingCart()
    {
        
//
        
// TODO: Add constructor logic here
        
//
    }

    
public static void AddToShoppingCart(int ProductID, int amount)
    {
        
if (HttpContext.Current.Request.Cookies["ShoppingCart"== null)
        {
            HttpCookie oCookie 
= new HttpCookie("ShoppingCart");
            
//Set Cookie to expire in 3 hours
            oCookie.Expires = DateTime.Now.AddHours(3);
            oCookie.Value 
= ProductID.ToString() + "*" + amount.ToString();

            HttpContext.Current.Response.Cookies.Add(oCookie);
        }
        
//如果cookie已经存在
        else
        {
            
bool bExists = false;
            
char[] sep = { ',' };
            HttpCookie oCookie 
= (HttpCookie)HttpContext.Current.Request.Cookies["ShoppingCart"];
            
//Set Cookie to expire in 3 hours
            oCookie.Expires = DateTime.Now.AddHours(3);
            
//Check if Cookie already contain same item
            string sProdID = oCookie.Value.ToString();

            
string[] arrCookie = sProdID.Split(sep);
            
//查看cookie中是否有该产品
            string newCookie="";
            
for (int i = 0; i < arrCookie.Length; i++)
            {
                
//
                if (arrCookie[i].Length != 0)
                {
                    
if (arrCookie[i].Trim().Remove(arrCookie[i].IndexOf('*')) == ProductID.ToString().Trim())
                    {
                        bExists 
= true;
                        
//得到数量
                        string amountStr = arrCookie[i].Trim().Substring(arrCookie[i].Trim().IndexOf('*'+ 1);
                        amountStr 
= (Convert.ToInt64(amountStr) + amount).ToString();
                        arrCookie[i] 
= arrCookie[i].Trim().Remove(arrCookie[i].IndexOf('*')) + "*" + amountStr;
                        newCookie 
= newCookie+","+arrCookie[i];
                    }
                }
            }

            
//如果没有该产品
            if (!bExists)
            {
                
if (oCookie.Value.Length == 0)
                {
                    oCookie.Value 
= ProductID.ToString() + "*" + amount.ToString();
                }
                
else
                {
                    oCookie.Value 
= oCookie.Value + "," + ProductID.ToString() + "*" + amount.ToString();
                }
            }
            
else
            {
                oCookie.Value 
= newCookie.Substring(1);
            }
           

            
//Add back into  the HttpContext.Current.Response Objects.
            HttpContext.Current.Response.Cookies.Add(oCookie);
        }
    }
    
public static void RemoveShoppingCart(int ProductID)
    {
        
if (HttpContext.Current.Request.Cookies["ShoppingCart"== null)
        {
            
//Do nothing
        }
        
else
        {
            HttpCookie oCookie 
= (HttpCookie)HttpContext.Current.Request.Cookies["ShoppingCart"];
            
//Set Cookie to expire in 3 hours
            char[] sep = { ',' };
            oCookie.Expires 
= DateTime.Now.AddHours(3);
            
//Check if Cookie already contain same item
            string sProdID = oCookie.Value.ToString();

            
string[] arrCookie = sProdID.Split(sep);
            
string[] arrCookie2 = new string[arrCookie.Length - 1];
            
int j = 0;
            
for (int i = 0; i < arrCookie.Length; i++)
            {
                
if (arrCookie[i].Trim().Remove(arrCookie[i].IndexOf('*')) != ProductID.ToString())
                {
                    arrCookie2[j] 
= arrCookie[i];
                    j
++;
                }
            }
            
string sCookieID = "";
            
for (int i = 0; i < arrCookie2.Length; i++)
            {
                sCookieID 
= sCookieID + arrCookie2[i] + ",";
            }
            
if (sCookieID.Length > 0)
            {
                oCookie.Value 
= sCookieID.Substring(0, sCookieID.Length - 1);
            }
            
else
            {
                oCookie.Value 
= "";
            }



            
//Add back into  the HttpContext.Current.Response Objects.
            HttpContext.Current.Response.Cookies.Add(oCookie);
        }
    }

}

 

 

ContractedBlock.gifExpandedBlockStart.gifCode
//为了方便我直接把id和订购量写死了

 CCookieShoppingCart.AddToShoppingCart(2,1)

购物车页面前台代码:

ContractedBlock.gifExpandedBlockStart.gifCode
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
        
<Columns>
            
<asp:TemplateField HeaderText="ProductName">
                
<ItemTemplate>
                    
<%# DataBinder.Eval(Container.DataItem,"Counter"%>
                    . 
<a href="Product.aspx?+id=<%# DataBinder.Eval(Container.DataItem,"ProductID") %>">
                        
<%# DataBinder.Eval(Container.DataItem,"ProductName"%></a>
                
</ItemTemplate>
            
</asp:TemplateField>
            
<asp:TemplateField HeaderText="d">
                
<ItemTemplate>
                    
<asp:TextBox ID="TextBox1" runat="server" Text=<%# DataBinder.Eval(Container.DataItem,"amount"%>></asp:TextBox>
                
</ItemTemplate>
            
</asp:TemplateField>
            
<asp:TemplateField HeaderText="price">
                
<ItemTemplate>
                
<%# Eval("price"%>
                
</ItemTemplate>
            
</asp:TemplateField>
            
<asp:TemplateField>
                
<ItemTemplate>
                    
<a href="ShoppingCart.aspx?action=remove&id=<%# DataBinder.Eval(Container.DataItem,"ProductID") %>">
                        Remove
</a> </td>
                
</ItemTemplate>
            
</asp:TemplateField>
            
        
</Columns>
    
</asp:GridView

 

 购物车页面后台代码:

 

ContractedBlock.gifExpandedBlockStart.gifCode
 protected void Page_Load(object sender, EventArgs e)
    {
        

        
if (!IsPostBack)
        {
            BindData();
        }
    }
    
private void BindData()
    {
        
if (Request.Cookies["ShoppingCart"!= null)
        {
            HttpCookie oCookie 
= (HttpCookie)Request.Cookies["ShoppingCart"];
            
string sProductID = oCookie.Value.ToString();
            
if (sProductID.Length == 0)
            {
                lblMsg.Text 
= "<B>No items in your shopping cart<B><BR>";
            }
            
else
            {
                
char[] sep = { ',' };
                
string[] sArrProdID = sProductID.Split(sep);

                DataTable dt 
= new DataTable();
                dt.Columns.Add(
new DataColumn("ProductID"));
                dt.Columns.Add(
new DataColumn("ProductName"));
                dt.Columns.Add(
new DataColumn("Counter"));
                dt.Columns.Add(
new DataColumn("amount"));
                dt.Columns.Add(
new DataColumn("price"));

                
int counter = 1;
                
for (int i = 0; i < sArrProdID.Length; i++)
                {
                    DataTable dtt 
= DAL.product.getViewById(Convert.ToInt32(sArrProdID[i].ToString().Remove(sArrProdID[i].IndexOf('*'))));
                    DataRow dr 
= dt.NewRow();
                    dr[
"ProductID"= sArrProdID[i].Remove(sArrProdID[i].IndexOf('*'));
                    dr[
"ProductName"= dtt.Rows[0]["productname"].ToString();
                    dr[
"Counter"= counter;
                    dr[
"amount"= sArrProdID[i].Substring(sArrProdID[i].IndexOf('*')+1);
                    dr[
"price"= dtt.Rows[0]["price"].ToString();
                    dt.Rows.Add(dr);
                    counter
++;
                }
               

                GridView1.DataSource 
= dt;
                GridView1.DataBind();

                
//GridView1.Columns[3].Visible = false;
            }
        }
内容概要:本文围绕直流微电网中带有恒功率负载(CPL)的DC/DC升压转换器的稳定控制问题展开研究,提出了一种复合预设性能控制策略。首先,通过精确反馈线性化技术将非线性不确定的DC转换器系统转化为Brunovsky标准型,然后利用非线性扰动观测器评估负载功率的动态变化和输出电压的调节精度。基于反步设计方法,设计了具有预设性能的复合非线性控制器,确保输出电压跟踪误差始终在预定义误差范围内。文章还对比了多种DC/DC转换器控制技术如脉冲调整技术、反馈线性化、滑模控制(SMC)、主动阻尼法和基于无源性的控制,并分析了它们的优缺点。最后,通过数值仿真验证了所提控制器的有效性和优越性。 适合人群:从事电力电子、自动控制领域研究的学者和工程师,以及对先进控制算法感兴趣的研究生及以上学历人员。 使用场景及目标:①适用于需要精确控制输出电压并处理恒功率负载的应用场景;②旨在实现快速稳定的电压跟踪,同时保证系统的鲁棒性和抗干扰能力;③为DC微电网中的功率转换系统提供兼顾瞬态性能和稳态精度的解决方案。 其他说明:文中不仅提供了详细的理论推导和算法实现,还通过Python代码演示了控制策略的具体实现过程,便于读者理解和实践。此外,文章还讨论了不同控制方法的特点和适用范围,为实际工程项目提供了有价值的参考。
内容概要:该论文介绍了一种名为偏振敏感强度衍射断层扫描(PS-IDT)的新型无参考三维偏振敏感计算成像技术。PS-IDT通过多角度圆偏振光照射样品,利用矢量多层光束传播模型(MSBP)和梯度下降算法迭代重建样品的三维各向异性分布。该技术无需干涉参考光或机械扫描,能够处理多重散射样品,并通过强度测量实现3D成像。文中展示了对马铃薯淀粉颗粒和缓步类动物等样品的成功成像实验,并提供了Python代码实现,包括系统初始化、前向传播、多层传播、重建算法以及数字体模验证等模块。 适用人群:具备一定光学成像和编程基础的研究人员,尤其是从事生物医学成像、材料科学成像领域的科研工作者。 使用场景及目标:①研究复杂散射样品(如生物组织、复合材料)的三维各向异性结构;②开发新型偏振敏感成像系统,提高成像分辨率和对比度;③验证和优化计算成像算法,应用于实际样品的高精度成像。 其他说明:PS-IDT技术相比传统偏振成像方法具有明显优势,如无需干涉装置、无需机械扫描、可处理多重散射等。然而,该技术也面临计算复杂度高、需要多角度数据采集等挑战。文中还提出了改进方向,如采用更高数值孔径(NA)物镜、引入深度学习超分辨率技术等,以进一步提升成像质量和效率。此外,文中提供的Python代码框架为研究人员提供了实用的工具,便于理解和应用该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值