# ProductsList.aspx 页面

说明： ProductsList页面用于显示一个所选种类的全部产品的列表。
使用说明： 当用户点击Commerce Starter Kit中大部分页面左侧菜单的产品类别链接时，显示此页面。产品类别链接并不是此页面的一部分，而是Menu用户控件（Menu.ascx）的一部分。
当用户点击产品种类链接时，该用户控件调用ProductsList.aspx页面。要查看得类别ID作为查询字符串传递给该页。例如：如果用户浏览Deception类别的商品时，显示该页面的URL将是ProductsList.aspx?categoryID=15。
ProductsList页面逻辑完全封装在 Page_Load 事件句柄中,当浏览器客户端访问该页面时该事件句柄被调用。
Page_Load 事件句柄： Page_Load事件句柄从页面的Request对象的参数集合中获取指定的CategoryID参数的值。参量集合包含由客户端发出的HTTP请求中的所有查询字符串，表单域，cookie，和服务器变量。这是一个典型的API，页面开发者通过这个API可以得到页面间进行切换时传递的参数。
将CategoryID 转换成整型后，Page_Load事件句柄创建ProductDB类的一个实例,并调用其GetProducts方法。该方法内部调用ProductsByCategory 存储过程从commerce数据库中获得产品信息
产品集合使用模板化的服务器控件来显示. DataList服务器控件包含两个描述表格外观的用户自定义的模板. ItemTemplate 模板定义表格里每个记录的外观;而 SelectedItemTemplate 模板则为当前被选定的记录定义不同的外观.在这个例子中, SelectedItemTemplate模板将一种不同的CSS类应用于超链接
添加到购物车： 在DataList的ItemTemplate中，我们应用了一个"Add To Cart"链接。当点击该链接时，将产品添加到用户的购物车。该链接指向AddToCart.aspx页面，并向该页面的超级链接传递一个ProductID作为动态生成的查询字符串参数。
需要说明的是，尽管可以通过一个ImageButton按钮返回到购买商品所在ProductsList。aspx 页面，实现添加功能，但是我们却由于下面的原因，采取了前面介绍的方法：

1. 更好地重用AddToCart逻辑。Commerce Starter Kit允许用户从ProductsList.aspx页面、ProductDetails.aspx页面和 SearchResults.aspx 页面向其购物车中添加产品。这些页面共享AddToCart页面的逻辑。
2. 更好地使用缓冲输出。如果每个"AddToCart"链接都指向各自相应的页面，那么对于该页面来说就会有过多的缓冲输出入口。每个入口对应唯一的查询字符串值。

性能说明：

- 我们将此页面的结果缓冲输出是为了使其性能最大化。这可以通过在页面顶端添加一个缓冲输出指令来实现。在本例中，我们选择每100分钟（6000秒）缓存输出页面一次。ASP.NET将会自动为每个不同的查询字符串存储一个缓存入口——将会为后续请求自动提供适当的值。

          <%@ OutputCache Duration="6000" VaryByParam="CategoryID" %>