项目七设计网上书店购物车ASP.NET案例开发建立站点建立站点,为站点添加两个文件夹books和images.并分别添加现有项(图片)。在站点内新建名为BookInfoGridView.aspx和BookView.aspx的两个页面。主要任务任务7-1:设计图书购买界面任务7-2:设计购物车商品信息类和购物车类任务7-3:实现匿名用户使用购物车任务7-4:实现匿名用户购物车到注册用户购物车的迁移任务7-1设计图书购买界面在BookInfoGridView.aspx页面上添加一个GridView和一个SqlDataSource控件。配置SqlDataSource的数据源,在配置Select语句步骤按照下图设置,其他采取默认,直到完成。单击GridView1控件的智能按钮,在套用格式下选择彩色型,并设置数据源为SqlDataSource1。单击编辑列命令,打开字段对话框。将bookID的Visible属性设置为False.在左上可用字段中,单击HyperLinkField,再单击“添加”按钮。在左下选定的字段中,单击该HyperLinkField,在右边设置其属性:HeaderText值为”详细信息”,Text值为“查看”,DataNavigateUrlFormatString值为“~/BookView.aspx?bookID={0}”,DataNavigateUrlFields值为”bookID”.设置完成后单击“确定”。设置GridView1允许分页。在BookView.aspx页面上添加一个DataList,一个SqlDataSource,一个HyperLink和一个名为labBookID的标签控件。设置HyperLink的Text属性值为“[返回图书列表页面]”,NavigateUrl属性值为“~/BookInfoGridView.aspx”。配置SqlDataSource的数据源,进行如下图的设置后,单击“WHERE”按钮。在添加WHERE字句对话框进行如下设置后单击“添加”按钮,其他采取默认,直到完成。设置DataList控件的数据源为SqlDataSource1。并单击“编辑模板”命令。按照下页图设置模板。其中”购买”为一个LinkButton控件,单击它的智能按钮编辑绑定,将CommandArgument绑定到bookID.在属性窗口的事件列表中,双击Command,编辑如下代码(暂时):protectedvoidLinkButton1_Command(objectsender,CommandEventArgse){Response.Write(scriptalert('购买成功!')/script);}将DataList中左上角图片控件绑定到字段picturePath.将“购买”左边的图片控件的imageUrl属性设置为~/images/cart.gif。最上面绿色标签绑定到bookName字段。完成后结束模板编辑。在Page_Load中添加如下代码:if(!IsPostBack){labBookID.Text=Request.QueryString[bookID];}分别将标签绑定到不同字段任务7-2设计购物车商品信息类和购物车类购物车的每个商品可以用一个实体类进行描述。用户使用购物车需要能够将选购商品放置到购物车中,能够从购物车中移除商品,还要能够修改购物车中商品数量,这些操作可以封装在一个购物车操作类中。购物车中图书信息包含图书的编号、书名、价格、数量、小计信息。小计是通过价格和数量相乘的结果。购物车的每本图书可以用一个实体类(CartItem)描述。CartItem类以面向对象的方式构建了购物车中的单条商品对象。购物车中一般有多本图书,可以用哈希表来存储,使用图书的编号作为哈希表的键,存储图书信息的实体对象作为哈希表的值。购物车类(ShoppingCart)对购物车的操作实际上是对哈希表的操作。购物车要能实现图书信息的添加、从购物车中移除图书信息和重新设置购物车中图书数量功能。本任务将介绍存储图书信息的实体类和购物车类的设计过程。为站点添加App_Code文件夹,在该文件夹下添加CS(类)文件CartItem.cs和ShoppingCart.cs(类)文件。设计CartItem.cs文件内容(设计购物车商品信息类)。[Serializable]publicclassCartItem{privateintm_bookID;privateStringm_bookName;privatedecimalm_bookPrice;privateintm_quantity=1;publicintBookID{get{returnm_bookID;}}publicStringBookName{get{returnm_bookName;}}publicdecimalBookPrice{get{returnm_bookPrice;}}publicintQuantity{get{returnm_quantity;}set{m_quantity=value;}}publicdecimalSubTotalPrice{get{returnm_bookPrice*m_quantity;}}publicCartItem(intbookID,StringbookName,decimalbookPrice){m_bookID=bookID;m_bookName=bookName;m_bookPrice=bookPrice;}}设计ShoppingCart.cs文件(设计购物车类)。代码参考程序中文件。CartItem类和ShoppingCart类构建的哈希表将被以二进制序列化方式存储到配置数据库的aspnet_Profile表中,因此,两个类的类名前都用“[]”标记一个属性Serializable。该属性指示类被序列化。序列化是指将对象实例的状态存储到存储介质的过程。在此过程中,先将对象公共字段、私有字段以及类名转换为字节流,然后再把字节流写入数据流。对对象进行反序列化时,将创建出与原对象完全相同的副本。任务7-3实现匿名用户使用购物车当登录用户访问购物网站,并单击“购买”时,商品会先被加入购物车。匿名用户(未登录)则一般是先查看自己感兴趣的商品,可以将商品加入购物车,当匿名用户希望购买购物车中的物品时,则需要进行登录。购物车页面设计可以用GridView控件实现。购物车类的CartItems属性保存购买的商品信息,并为GridView控件提供数据源。使用个性化服务配置购物车:匿名用户登录网站时,网站分配匿名用户ID,匿名用户可以使购物车的信息保存到配置数据库中。当匿名用户再一次登录网站时,可以从配置文件中获得购物车信息。设计购物车界面在站点添加ShoppingCartPage.aspx页面。在页面添加两个标签,一个GridView,一个HyperLink控件。布局如下图。标签的ID属性分别为:labMsg,labTotalPrice.将labMsg的字体颜色设置为红色,用来显示提示信息。设置超链接的NavigateUrl属性值为“~/BookInfoGridView.aspx”。购物车中图书的总价格在“labTotalPrice”中呈现。设置GridView控件的Caption属性为”购物车”,DataKeyNames属性值为”BookID”,通过“BookID”可以唯一标识一本图书。ShowFooter为“True”,AutoGenerateColumns为False.在母版页上添加超链接HyperLink控件,设置其Text属性值为“[查看购物车]”,NavigateUrl属性值为“~/ShoppinCartPage.aspx”。单击GridView1的智能标记,设置一个“自动套用格式”选项。单击“编辑列”,添加CommandField的“选择”项,设置其“HeaderText”和”SelectText”属性值为“清除’,ShowSelectButton属性值为”true”。再添加4个BoundField字段。这4个绑定字段的”DataField”和”HeaderText”属性值分别为“BookID”“图书编号”,“BookName”“图书名称”,“BookPrice”“销售价格”,“SubTotalPrice”“价格小计”。将两个表示价格的绑定字段的DataFormatString值设置为{0:c}。再添加一个TemplateField字段,设置其HeaderText属性值为“更新数量”。单击GridView1的智能标记,单击“编辑模板”。在ItemTemplate模板上添加一个文本框,修改ID属性值为txbBookQuantity,Width为50px。单击文本框的智能标记,单击“编辑DataBindings”,打开数据绑定对话框,将Text属性的“自定义绑定”表达式设置为“Bind(”Quantity“)”,单击确定。在属性窗口的事件列表中,双击TextChanged事件(稍后添加代码),表示当购买数量发生更新时要更新购物车中相应图书的数量。切换GridView1控件智能标记到FooterTemplate.添加两个LinkButton,ID属性分别为“lbtUpdate”和“lbtBuy”,Text属性分别为“更新”和“购买”,单击lbtBuy,在事件列表的Click事件上双击,进入到lbtBuy_Click事件的编辑状态(稍后添加代码)。切换到EmptyDataTemplate界面,设置如下图。完成后结束模板编辑。单击GridView1,在属性窗口的事件列表中,双击SelectedIndexChanged事件(稍后添加代码)。当选择一本图书时执行该事件,购物车设计中将该事件定义为删除图书的操作。匿名用户购物车个性化设置匿名用户登录网站,网站将给匿名用户产生一个ID,用于标识匿名用户的身份。使用aspnet_regsql工具在NetBook数据库中创建存储profile信息的表结构,存储过程及视图。匿名用户登录网站的信息将写入表aspnet_Users中。匿名用户使用购物车的信息将写入表aspnet_Profile中。设计匿名用户购物车需要对Web.Config进行设置。代码见站点的Web.Config文件内容。1)配置个性化服务默认数据库连接词在configuration配置节的子配置节connectionStrings配置节下添加访问NetBook数据库的连接词。配置代码段如下:connectionStringsremovename=LocalSqlServer/addname=LocalSqlServerconnectionString=DataSource=(local);InitialCatalog=NetBook;IntegratedSecurity=TrueproviderName=System.Data.SqlClient/首先移除系统默认的数据库连接词“LocalSqlServer”,然后定义NetBook数据库连接词“LocalSqlServer”。system.web配置节的子配置节profile的属性defaultProvider设置缺省的连接对象名MyProfileProvider,在profile子配置节providers下添加连接配置项。anonymousIdentificationenabled=true/profiledefaultProvider=MyProfileProviderprovidersaddname=MyProfileProvidertype=System.Web.Profile.SqlProfileProviderconnectionStringName=LocalSqlServerapplic