
3.7 产品信息模块设计
3.7.1 产品信息模块概述
对于一个企业的门户网站,宣传自己公司的产品是必不可少的,本企业门户网站的首页分类展示了公司的最新产品,而且网站导航条中设置了一个“产品展示”菜单,用户可以通过选择其子菜单项查看相关类别的所有产品信息。产品信息页面运行效果如图3.18所示。

图3.18 产品信息页面
3.7.2 产品信息模块技术分析
产品信息模块实现的关键是如何下载正在查看的产品,这里主要用到了Response类的AppendHeader方法和WriteFile方法,下面分别对它们进行详细介绍。
1. AppendHeader方法
用来将HTTP头添加到输出流中,其语法格式如下:
public void AppendHeader(string name,string value)
name:要追加value的HTTP标头的名称。
value:要追加到name标头的值。
2. WriteFile方法
用来将指定的文件直接写入HTTP响应输出流,该方法有4种重载形式,其中,本系统中用到的重载形式如下:
public void WriteFile(string filename)
filename:要写入HTTP输出的文件名。
例如,企业门户网站中使用Response类的AppendHeader方法和WriteFile方法实现了产品的下载功能,关键代码如下:

注意
这里需要注意的是对文件名进行UTF8编码,否则,当文件名为中文名时,下载文件会出现文件名乱码的问题。
3.7.3 产品信息模块实现过程
本模块使用的数据表:tb_Product
产品信息模块的具体实现步骤如下:
(1)新建一个基于MasterPage.master母版页的Web页面,命名为Sort.aspx,主要用于查看产品的详细信息,该页面中主要用到的控件如表3.9所示。
表3.9 产品信息页面主要用到的控件

(2)在Sort.aspx页面中,首先创建公共类DataOperate和ProductOperate的对象,以便调用其中的方法,代码如下:
例程23 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs

Sort.aspx页面的后台代码中自定义了两个方法,分别为BindInfo方法和BindAllInfo方法。BindInfo方法用来根据接收的产品、软件或补丁编号查找其详细信息,并将查找结果显示在DataList控件中,其实现代码如下:
例程24 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs

BindAllInfo方法用来根据接收的类型编号查找产品、软件或补丁信息,并将查找结果显示在DataList控件中。BindAllInfo方法的实现代码如下:
例程25 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs

产品、软件或补丁的详细信息是通过在Sort.aspx页面的HTML代码页中对相应的Label控件绑定进行显示的,由于各Label控件的绑定方式相同,这里以“产品名称”为例介绍,将数据表中的Name字段绑定到“产品名称”Label控件上的代码如下:
例程26 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx
<asp:Label ID="labName" runat="server" Font-Size="9pt" ><%# DataBinder.Eval(Container.DataItem,"Name") %></asp:Label>
Sort.aspx页面加载时,首先判断接收的参数是产品、软件或补丁编号,还是类别编号,如果是产品、软件或补丁编号,则调用BindInfo方法显示数据,如果是类别编号,则调用BindAllInfo方法显示数据。Sort.aspx页面的Page_Load事件代码如下:
例程27 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs

单击“点击下载”超级链接,如果附件存在,则下载指定的文件,同时调用公共类ProductOperate中的UpdateLoadNum方法更新文件的下载次数,否则弹出“文件不存在”信息提示。实现下载功能的代码如下:
例程28 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs

LinkButton控件分别用来实现“第一页”、“上一页”、“下一页”和“最后一页”功能,其实现代码如下:
例程29 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs
