书店应用程序:中间层开发实战
1. 目标概述
在本次实践中,我们将聚焦于构建书店应用程序的中间层。具体目标如下:
- 运用 Visual Basic 代码编写中间层的功能。
- 修改 Web 应用程序中的代码隐藏文件。
- 利用会话处理在 ASPX 页面之间传递信息。
- 实现部分页面更新。
2. 书店 Web 应用程序回顾
在之前的操作中,我们已经对三层架构的书店 Web 应用程序进行了测试驱动,创建了网页和数据库组件。现在,我们要编写代码来明确该应用程序的功能。在开始创建中间层之前,需要回顾应用程序的伪代码和 ACE 表。
2.1 伪代码逻辑
| 操作场景 | 具体操作 |
|---|---|
| 当请求 Books 页面时 | 从数据库中检索书籍标题,并在 ListBox 中显示。 |
| 用户从 ListBox 中选择书籍标题时 | 在 ListBox 下方的 Image 控件中显示该书的封面图像。 |
| 用户点击“查看信息”按钮时 |
- 若用户未从 ListBox 中选择书籍,显示错误消息。
- 否则,存储所选书籍的产品 ID,并将浏览器重定向到 BookInformation 页面。 |
| 当请求 BookInformation 页面时 | 从数据库中检索所选书籍的信息,在 Label 中显示书籍标题和作者,在 Image 中显示封面艺术,在 DetailsView 中显示其余信息。 |
| 用户在 BookInformation 页面点击“返回书籍列表”按钮时 | 将浏览器重定向回 Books 页面。 |
2.2 ACE 表
| 操作 | 控件/对象 | 事件 |
|---|---|---|
| 标记 Books 页面 | availableLabel, instructionsLabel | Page Load (for Books.aspx) |
| 从数据库中检索书籍标题 | linqDataSource | - |
| 在 ListBox 中显示书籍标题 | bookTitlesListBox | bookTitlesListBox SelectedIndex-Changed |
| 在 Image 中显示书籍封面图像 | bookTitlesListBox, db (an object class Book-InformationDBData-Context), coverImage | informationButton Click |
| 若用户未从 ListBox 中选择书籍 | bookTitlesListBox | - |
| 显示错误消息 | bookRequiredField-Validator | - |
| 否则,存储所选书籍的产品 ID 到会话变量 | bookTitlesListBox, Session | - |
| 将浏览器重定向到 BookInformation 页面 | Response | - |
| 当 BookInformation 页面加载时 | db (an object of class BookInformationDB-DataContext), Session | Page Load (for Book-Information.aspx) |
| 在 Label 中显示书籍标题 | bookTitleLabel | - |
| 在 Label 中显示作者 | authorsLabel | - |
| 在 Image 中显示封面艺术 | bookImage | - |
| 在 DetailsView 中显示其余信息 | linqDataSource, bookDetailsView | - |
| 用户点击“返回书籍列表”按钮 | bookListButton | Click |
| 将客户端浏览器重定向回 Books 页面 | Response | - |
3. 编写 Books 页面的代码隐藏文件
3.1 更改 Books.aspx.vb 中的类名
3.1.1 打开项目
- 打开 Visual Web Developer,选择“文件”>“打开网站…”,在弹出的“打开网站”对话框中,点击“文件系统”,选择 C:\SimplyVB2008 目录下的 Bookstore 文件夹,然后点击“打开”按钮打开书店 Web 应用程序。
3.1.2 显示代码隐藏文件
- 每个在 Visual Web Developer 中创建的 ASPX 页面都有一个用 .NET 语言(如 Visual Basic)编写的对应类。包含这个类的 Visual Basic 文件称为代码隐藏文件,其扩展名为 .aspx.vb。若未选中,点击解决方案资源管理器工具栏中的“嵌套相关文件”按钮,展开 Books.aspx 节点以显示代码隐藏文件 Books.aspx.vb。
3.1.3 查看代码隐藏文件
- 双击解决方案资源管理器窗口中的 Books.aspx.vb 查看该文件。由于尚未开始编写事件处理程序,此文件中目前没有命令。
3.1.4 修改类名和属性
- 删除类定义上方的空行,将 Books.aspx.vb 第 1 行的类名从 _Default 更改为 Books。
- 在 Books.aspx 的源视图中,将第 2 行 Page 指令中的 Inherits 属性从 Inherits=”_Default” 更改为 Inherits=”Books”,确保 ASPX 页面标记中的代码成为代码隐藏文件中 Books 类的一部分。
- 选择“文件”>“全部保存”保存修改后的代码。
3.2 定义“查看信息”按钮的 Click 事件处理程序
3.2.1 创建事件处理程序
- 切换到 Books.aspx 的设计视图,双击“查看信息”按钮,在 Books.aspx.vb 文件中创建事件处理程序 informationButton_Click。
3.2.2 添加代码到事件处理程序
- 向事件处理程序中添加以下代码:
' 以下为示例代码结构,实际代码需根据图 31.6 中的 8 - 12 行添加
' 利用会话跟踪功能,在不同 ASPX 页面间共享用户数据
Session("productID") = bookTitlesListBox.SelectedValue
Response.Redirect("BookInformation.aspx")
- 通常,Web 应用程序是无状态的,但可以使用 ASP.NET 的会话跟踪功能在页面间共享用户数据。上述代码通过向 Session 对象添加键值对来实现这一点,然后使用 Response 对象的 Redirect 方法将浏览器重定向到 BookInformation 页面。
3.2.3 保存项目
- 选择“文件”>“全部保存”保存修改后的代码。
3.3 显示所选书籍的封面图像
3.3.1 放置图像文件
- 使用 Windows 资源管理器定位到 C:\Examples\Tutorial31\images 目录,该目录包含书籍封面图像。
- 将 images 目录复制到 C:\SimplyVB2008\Bookstore 目录,点击解决方案资源管理器工具栏中的“刷新”按钮,确保 images 目录出现在解决方案资源管理器中。也可以直接从 Windows 资源管理器将 images 文件夹拖到 Visual Web Developer 解决方案资源管理器顶部的 C:\SimplyVB2008\Bookstore 目录。
3.3.2 定义 ListBox 的 SelectedIndexChanged 事件处理程序
- 在设计视图中双击 bookTitlesListBox,创建其 SelectedIndexChanged 事件处理程序,并添加以下代码:
' 以下为示例代码结构,实际代码需根据图 31.7 中的 20 - 30 行添加
Dim db As New BookInformationDBDataContext()
Dim coverFile = (From b In db.Books Where b.ProductID = bookTitlesListBox.SelectedValue Select b.Coverart).Single()
coverImage.ImageUrl = coverFile
coverImage.Visible = True
- 上述代码通过 LINQ 查询从数据库中检索所选书籍的封面图像文件名,并将其赋值给 Image 控件的 ImageUrl 属性,然后使 Image 控件可见。
3.3.3 启用 ListBox 的 AutoPostBack
- 切换到设计视图,选择 bookTitlesListBox,点击 ListBox 右上角的小黑色三角形,打开 ListBox 任务菜单,点击“启用 AutoPostBack”复选框。当所选索引更改时,浏览器会自动重新请求页面,服务器会响应 SelectedIndexChanged 事件,确定所选图像并将页面重新发送回客户端。
3.3.4 保存项目
- 选择“文件”>“全部保存”保存修改后的代码。
3.4 自测问题
-
哪个类定义了 ASPX 页面的基本功能?(答案:c)
- a) Form
- b) WebForm
- c) Page
- d) None of the above
-
哪个属性会强制浏览器自动重新加载 ASPX 页面以响应控件的事件?(答案:a)
- a) AutoPostBack
- b) Reload
- c) RePost
- d) ForcePostBack
4. 编码 BookInformation 页面的代码隐藏文件并绑定数据到 DetailsView
4.1 定义 BookInformation.aspx 的 Page_Load 事件处理程序
4.1.1 查看代码隐藏文件
- 在解决方案资源管理器中右键单击 BookInformation.aspx,选择“查看代码”查看代码隐藏文件 BookInformation.aspx.vb。注意类名是 BookInformation,删除类定义上方的空行。
4.1.2 插入 Page_Load 事件处理程序
- 从“类名”下拉列表中选择 (Page Events),然后从“方法名”下拉列表中选择 Load,在 BookInformation 类中插入 Page_Load 事件处理程序。
4.1.3 从数据库中检索所选书籍
- 向 Page_Load 事件处理程序中添加以下代码:
' 以下为示例代码结构,实际代码需根据图 31.11 中的 8 - 25 行添加
Dim db As New BookInformationDBDataContext()
Dim productID As Integer = CInt(Session("productID"))
Dim selectedBook = (From b In db.Books Where b.ProductID = productID Select b).Single()
bookTitleLabel.Text = selectedBook.Title
authorsLabel.Text = selectedBook.Authors
bookImage.ImageUrl = selectedBook.Coverart
- 上述代码创建了一个 DataContext 对象用于从数据库中检索信息,从会话对象中获取产品 ID,使用 LINQ 查询检索所选书籍,并在相应的控件中显示书籍信息。
4.1.4 保存项目
- 选择“文件”>“全部保存”保存修改后的代码。
4.2 定义 bookListButton_Click 事件处理程序
4.2.1 创建事件处理程序
- 在设计视图中双击“返回书籍列表”按钮,创建 bookListButton_Click 事件处理程序。该按钮用于将客户端浏览器重定向回 Books.aspx 页面。
4.2.2 添加代码到事件处理程序
- 向事件处理程序中添加以下代码:
Response.Redirect("Books.aspx")
- 选择“文件”>“全部保存”保存修改后的代码。
4.3 使用 LinqDataSource 创建数据绑定的 DetailsView
4.3.1 使 DetailsView 数据绑定
- 切换到 BookInformation.aspx 的设计视图,选择 bookDetailsView 控件,点击其右上角的小黑色箭头,打开 DetailsView 任务菜单,选择 ,在“选择数据源类型”对话框中选择 LINQ 数据源类型,并将其命名为 linqDataSource,点击“确定”。
4.3.2 配置 LinqDataSource 的数据字段
- 在出现的“配置数据选择”对话框中,选择之前创建的 BookInformationDBDataContext 对象,然后点击“下一步 >”。确保在“表”组合框中选择 Products 表,勾选 Copyright、Edition、ISBN 和 Description 复选框,使 LinqDataSource 包含 Products 表中所选字段的信息。
4.3.3 配置 LinqDataSource 的 Where 表达式
- 点击“Where…”按钮,在“配置 Where 表达式”对话框中,从“列”组合框中选择 ProductID,从“运算符”组合框中选择 ==,从“源”组合框中选择 Session。在“参数属性”组框的“会话字段”文本框中输入 productID,点击“添加”按钮。此表达式表示 LinqDataSource 仅从数据库中检索包含与 productID 会话项中值匹配的 ProductID 的条目。点击“确定”关闭“配置 Where 表达式”对话框,点击“完成”关闭“配置数据源”对话框。
4.3.4 检查数据绑定的 DetailsView
- 此时 bookDetailsView 已绑定到 linqDataSource 中的信息,字段已更新以显示在“配置数据源”对话框中选择的列名。可以重新排序 DetailsView 中的字段,打开 DetailsView 任务菜单,选择“编辑字段…”,在“字段”对话框中选择字段并使用上下箭头按钮移动字段,也可以添加和删除字段。按照图 31.16 排列字段后点击“确定”关闭“字段”对话框。
4.3.5 保存项目
- 选择“文件”>“全部保存”保存修改后的代码。
至此,我们完成了书店 Web 应用程序的中间层开发,并对其进行了全面的配置和测试。通过上述步骤,我们实现了页面间的数据传递、数据库信息的检索和显示,以及用户交互的处理。在实际应用中,还可以根据需求进一步优化和扩展该应用程序,例如添加更多的功能页面、优化数据库查询性能等。
5. 测试书店 Web 应用程序
在完成书店 Web 应用程序的中间层开发后,需要对其进行测试,以确保各项功能正常运行。以下是测试该应用程序的具体步骤:
5.1 启动应用程序
- 打开 Visual Web Developer 中的书店 Web 应用程序。
- 选择“调试”>“开始调试”(或按 F5 键)启动应用程序。
5.2 测试 Books 页面功能
5.2.1 检查书籍标题显示
- 应用程序启动后,应显示 Books 页面。确认页面上的 ListBox 中显示了从数据库中检索到的书籍标题。
5.2.2 测试书籍封面图像显示
- 点击 ListBox 中的某个书籍标题,查看该书籍的封面图像是否显示在 ListBox 下方的 Image 控件中。这是通过 ListBox 的 SelectedIndexChanged 事件触发的,确保该功能正常工作。
5.2.3 测试“查看信息”按钮功能
- 不选择 ListBox 中的任何书籍,直接点击“查看信息”按钮,应弹出错误消息,提示用户选择一本书籍。
- 选择 ListBox 中的一本书籍,然后点击“查看信息”按钮,浏览器应重定向到 BookInformation 页面,并且 Session 中应正确存储了所选书籍的产品 ID。
5.3 测试 BookInformation 页面功能
5.3.1 检查书籍信息显示
- 在 BookInformation 页面加载后,确认页面上的 Label 控件中显示了所选书籍的标题和作者,Image 控件中显示了封面艺术,DetailsView 控件中显示了书籍的 ISBN、版本、版权和描述等信息。
5.3.2 测试“返回书籍列表”按钮功能
- 点击“返回书籍列表”按钮,浏览器应重定向回 Books 页面。
5.4 测试数据绑定功能
- 在 BookInformation 页面中,检查 DetailsView 控件是否正确显示了从数据库中检索到的书籍信息。可以通过修改数据库中的书籍信息,然后重新加载页面,查看 DetailsView 控件中的信息是否相应更新。
5.5 测试会话状态功能
- 在测试过程中,确保会话状态正常工作。例如,在从 Books 页面重定向到 BookInformation 页面时,Session 中存储的产品 ID 应正确传递,并且在 BookInformation 页面中可以正确使用该 ID 从数据库中检索书籍信息。
5.6 测试流程图
graph LR
A[启动应用程序] --> B[显示 Books 页面]
B --> C{点击 ListBox 标题}
C -- 是 --> D[显示书籍封面图像]
C -- 否 --> E{点击“查看信息”按钮}
E -- 未选书籍 --> F[显示错误消息]
E -- 已选书籍 --> G[重定向到 BookInformation 页面]
G --> H[显示书籍信息]
H --> I{点击“返回书籍列表”按钮}
I --> J[重定向回 Books 页面]
6. 总结与扩展
6.1 总结
通过本次开发,我们成功完成了书店 Web 应用程序的中间层开发,实现了以下主要功能:
- 使用 Visual Basic 代码编写了中间层的功能,包括事件处理程序和数据库查询。
- 修改了代码隐藏文件,确保 ASPX 页面与代码逻辑的正确关联。
- 利用会话处理在 ASPX 页面之间传递信息,实现了用户选择书籍信息的传递。
- 使用 LinqDataSource 进行数据绑定,自动显示数据库中的书籍信息。
- 通过测试,确保了应用程序的各项功能正常运行。
6.2 扩展建议
在实际应用中,可以根据需求对该应用程序进行进一步的扩展和优化,以下是一些建议:
6.2.1 增加用户交互功能
- 可以添加搜索功能,让用户能够根据关键词搜索书籍。
- 增加用户评价和评论功能,让用户可以对书籍进行评价和发表评论。
6.2.2 优化数据库查询性能
- 可以对数据库查询进行优化,例如使用索引、缓存等技术,提高查询效率。
6.2.3 增加安全性
- 可以添加用户认证和授权功能,确保只有授权用户才能访问某些页面和功能。
- 对用户输入进行验证和过滤,防止 SQL 注入等安全漏洞。
6.2.4 扩展功能列表
| 扩展功能 | 实现思路 |
|---|---|
| 搜索功能 | 在 Books 页面添加搜索框,根据用户输入的关键词在数据库中进行模糊查询,并将结果显示在 ListBox 中。 |
| 用户评价和评论功能 | 在 BookInformation 页面添加评价和评论输入框,用户提交后将数据存储到数据库中,并在页面上显示。 |
| 用户认证和授权 | 使用 ASP.NET 的身份验证和授权机制,创建用户登录和注册页面,对不同用户角色进行权限管理。 |
| 输入验证和过滤 | 在用户输入表单中添加验证控件,对用户输入进行验证,防止恶意输入。 |
6.3 未来展望
随着 Web 技术的不断发展,我们可以进一步改进该应用程序,例如使用更先进的前端框架(如 React、Vue.js)来提升用户体验,使用云计算技术来提高应用程序的可扩展性和可靠性。同时,还可以结合大数据和人工智能技术,为用户提供更个性化的书籍推荐服务。
通过本次开发和扩展,我们不仅掌握了 ASP.NET 开发的基本技能,还了解了如何根据实际需求对应用程序进行优化和扩展,为今后的 Web 开发工作打下了坚实的基础。
书店中间层开发实战
超级会员免费看
28

被折叠的 条评论
为什么被折叠?



