![ASP.NET项目开发全程实录(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/589/26793589/b_26793589.jpg)
3.7 产品信息模块设计
3.7.1 产品信息模块概述
对于一个企业的门户网站,宣传自己公司的产品是必不可少的,本企业门户网站的首页分类展示了公司的最新产品,而且网站导航条中设置了一个“产品展示”菜单,用户可以通过选择其子菜单项查看相关类别的所有产品信息。产品信息页面运行效果如图3.18所示。
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P145_8855.jpg?sign=1739089319-gPqAgDHI4FratKt8qdNdx5kpINZNG4Cy-0-aaf9f6fd25eaf6114828b54fab3e8432)
图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方法实现了产品的下载功能,关键代码如下:
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P146_33331.jpg?sign=1739089319-CcMC6WHZX9tBOmmbvtZzHN7r2LetvtuW-0-668b514dbc050fd9645e469da5b8d12c)
注意
这里需要注意的是对文件名进行UTF8编码,否则,当文件名为中文名时,下载文件会出现文件名乱码的问题。
3.7.3 产品信息模块实现过程
本模块使用的数据表:tb_Product
产品信息模块的具体实现步骤如下:
(1)新建一个基于MasterPage.master母版页的Web页面,命名为Sort.aspx,主要用于查看产品的详细信息,该页面中主要用到的控件如表3.9所示。
表3.9 产品信息页面主要用到的控件
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-T147_33334.jpg?sign=1739089319-yHuHrq6eWZdYYf4qDLLcup01hm6uQKXd-0-392774fc9b49a91f261d2e55a483372f)
(2)在Sort.aspx页面中,首先创建公共类DataOperate和ProductOperate的对象,以便调用其中的方法,代码如下:
例程23 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P147_33335.jpg?sign=1739089319-lShYPImbRtLwcHckOeRNRXZhOpuc2mm2-0-e65d8698da86d0329a1ba74cb05b4098)
Sort.aspx页面的后台代码中自定义了两个方法,分别为BindInfo方法和BindAllInfo方法。BindInfo方法用来根据接收的产品、软件或补丁编号查找其详细信息,并将查找结果显示在DataList控件中,其实现代码如下:
例程24 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P147_33337.jpg?sign=1739089319-AXqV9ikVZgd0aTv8F6lRwuwm2zyMea4i-0-2692265fee3edb41a1cbdf3b459707c9)
BindAllInfo方法用来根据接收的类型编号查找产品、软件或补丁信息,并将查找结果显示在DataList控件中。BindAllInfo方法的实现代码如下:
例程25 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P148_33340.jpg?sign=1739089319-0KstWGVkDyWv9DwheSkqc51a6p53hPWO-0-d5e60d0c17eb56d1bbf009bad59086b4)
产品、软件或补丁的详细信息是通过在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
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P150_33346.jpg?sign=1739089319-A4ZJf0exHrfwxpZzc5G3FpBq86eB01jM-0-5de5b732d2cdda64ff543a4d8ace4751)
单击“点击下载”超级链接,如果附件存在,则下载指定的文件,同时调用公共类ProductOperate中的UpdateLoadNum方法更新文件的下载次数,否则弹出“文件不存在”信息提示。实现下载功能的代码如下:
例程28 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P150_33348.jpg?sign=1739089319-NohifR9cbgy0I0NUKd5vsCf09Imo7b5X-0-28a5f1f78aa4dd02de5683d891c3484a)
LinkButton控件分别用来实现“第一页”、“上一页”、“下一页”和“最后一页”功能,其实现代码如下:
例程29 代码位置:资源包\TM\03\EnterpriseWeb\User\Sort.aspx.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P151_33350.jpg?sign=1739089319-l2s2zr74Ykkgjz3eDxNYBijkfFx2QOjD-0-29d5b6415183bafd2d55d1d50905758a)