一、 Web主要功能:
1、 页面展现
2、 数据缓存——页面输出缓存、数据缓存、对象缓存
二、 实现细节:
1、 网站页面文件功能说明
文件名 |
.aspx文件 |
.cs文件 |
default |
1、使用了两个用户控件,Banner(页面底端)和NavBarNoMenu(页面顶端) |
没有特殊作用 |
Banner |
在页面底端,用于显示用户最感兴趣的宠物的广告图片 |
使用到了AccountController.cs文件 |
AccountController |
无 |
1、用于实现一组对用户账户进行操作的功能:如创建、更新账户,用户登录、注销,返回账号对象,取回当前用户最喜爱的宠物类别等 2、跟Web层打交道的类(从Web层引用的命名空间可以看出),只有BLL和Model中的类。在实例化的时候一定要注意,实例化的是哪个层的类。如BLL层叫Account,而Model层叫AccountInfo |
Category |
1、注意:使用另一个命名空间(即使是同一个Assembly)中的类的方法!例: <%@ Register TagPrefix="controls" Namespace="PetShop.Web.Controls" Assembly="PetShop.Web" %> 2、开始涉及到翻页程序的问题!将SimplePager和DataGrid对照着看,可以知道在控件中使用模板列的方式,以及控件中的实现方式! |
1、最主要的就是一个PageChanged()方法,响应了由SimplePager定义的PageIndexChanged事件 2、处理了该从哪里取数据,即该显示什么数据的问题 3、若数据已被显示过,则直接从缓存中读取数据,并将SimplePager对象绑定数据源;若数据没有被显示过,则实例化BLL层的对象,从数据库读取数据(IList引用),并缓存起来,然后将SimplePager对象绑定数据源 4、绑定数据源的事件又引发了SimplePager对象的OnDataBinding()事件处理程序 |
SimplePager |
无 |
1、为了使SimplePager类使用继承于IList接口的数据源,所以重写了Repeater的DataSource属性 2、对外公布了PageIndexChanged事件,可供客户事件处理程序使用 3、主要用于计算(当前)页码,以及根据总页码及当前页码,决定是否显示“向前”和“向后”的(图片)按钮 4、不规定数据源,使这个翻页程序可在很多场合重用 5、SimplePager控件似乎不应该在每次翻页的时候都检查数据源啊?! |
NavBar.ascx |
1、导航条。包括主图片、分情况显示登录或注销输入框、Category项目等 2、由于是演示程序,这里的Category被写死在页面当中,当类别可以动态修改的时候不能使用,参考价值不大 |
1、主要用于根据用户身份认证情况显示登录选项和注销选项 |
Items |
1、显示Items列表和显示Products列表(Category文件)实现方式是类似的 2、也是在页面中使用了SimplePager控件,用于根据“当前给定的数据源”进行数据绑定,并翻页显示 |
1、与Category.aspx.cs完成的功能相同 |
ItemDetails |
1、显示某个Item的具体细节情况,如单价、库存数量等 2、如果选中,可点击“添加”按钮,将该Item添加到购物车(在购物车页面中调整要购买该Item的数量) |
1、读取用户请求的ItemId 2、实例化BLL层的对象,根据ItemId得到一个ItemInfo实例 3、将此ItemInfo实例的各个属性分别赋值给页面上的各Label,并显示 |
CleanString.cs |
无 |
1、用于过滤用户输入的字符,如去掉空格,替换掉怪字符等 2、加一些更特殊的过滤选项,可以使用在自己的项目中 |
ShoppingCart |
1、非登录用户也可以向购物车中添加物品,但当下订单的时候会出现登录框 2、主要用于显示当前购物车中的物品条目及数量 |
1、用于处理用户点击“Update”或“Remove”时,重新计算某个Item的费用、总共的费用或移除某个Item 2、其他响应购物车事件的操作 |
ViewStatePager.cs |
|
1、主要用于处理购物车中物品显示时的翻页问题 2、继承于SimplePager类,大部分的方法都由重写SimplePager类的同名方法得到 3、比SimplePager类多定义了两个方法:PreviousClicked()和MoreClicked() |
CartController.cs |
无 |
1、主要功能:对购物车的存取操作 2、创建或从Session中取出现有的购物车;将修改后的购物车保存回Session 3、购买购物车中现有的物品——调用BLL层,插入一个新的订单(使用了BLL层的OrderInsert.cs类,这个类是应用“分布式事务”进行处理的典型案例) 4、向Session中保存或取出用户信用卡信息和邮递地址信息等 |
CreateAccount |
1、用于显示用户注册时的界面 2、其中的My Address和My Preference都采用了独立的User Control |
1、对用户输入的信息,都要使用CleanString类进行过滤 2、使用了Model中的AccountInfo和AccountController类,将用户注册的信息添加到数据库中 |
|