这是一个完整的ASP.NET Web Forms示例项目,用于演示教材《面向服务的计算和WEB数据管理》第5章5.1节的核心内容:
- 5.1.1 Web应用的构件(配置文件、目录结构)
- 5.1.2 服务控件(控件、事件、Session)
通过这个项目,你将学会:
- ✅ ASP.NET Web应用的基本结构和文件组织
- ✅ Web.config配置文件的作用和写法
- ✅ Global.asax全局事件处理
- ✅ 服务控件(Web Controls)的使用
- ✅ 事件驱动编程(按钮点击事件)
- ✅ Session在页面之间传递数据
- ✅ 前后台代码分离(.aspx + .aspx.cs)
WebApp_5.1_Demo/
│
├── Web.config # 网站配置文件(5.1.1重点)
├── Global.asax # 全局应用程序文件(5.1.1)
│
├── Default.aspx # 首页
├── Default.aspx.cs # 首页后台代码
│
├── Sender.aspx # 发送端页面(5.1.2)
├── Sender.aspx.cs # 发送端后台代码(5.1.2)
│
├── Receiver.aspx # 接收端页面(5.1.2)
├── Receiver.aspx.cs # 接收端后台代码(5.1.2)
│
├── PageHeader.ascx # 用户控件 - 页面头部(5.1.2重点!)
├── PageHeader.ascx.cs # 用户控件后台代码
│
├── App_Code/ # 源代码目录
│ └── EncryptorService.cs # 加密服务类
│
├── App_Data/ # 数据文件目录
├── bin/ # 编译后的程序集目录
└── README.md # 本说明文档
-
Sender.aspx(发送端)
- 用户在文本框中输入消息(例如:"My password is SuperMan1")
- 点击 "Encrypt Now" 按钮,消息被加密
- 加密后的密文显示在页面上,并自动存入Session
- 点击 "Send to Receiver" 按钮,跳转到接收端
-
Receiver.aspx(接收端)
- 页面自动从Session中读取加密的消息
- 点击 "Decrypt Now" 按钮,消息被解密
- 原始消息显示在页面上
- 可以点击 "返回发送端" 回到Sender页面
<connectionStrings>
<!-- 数据库连接字符串(推荐写法) -->
<add name="MyConnectionString"
connectionString="..." />
</connectionStrings>
<appSettings>
<!-- 应用程序设置 -->
<add key="SiteName" value="示例网站" />
</appSettings>重点:
- ✅ 敏感信息(数据库地址、密码)应该放在Web.config中
- ✅ 不要硬编码在C#代码里
- ✅ 子目录的Web.config会覆盖父目录的设置(就近优先)
void Application_Start(object sender, EventArgs e)
{
// 应用启动时执行
}
void Session_Start(object sender, EventArgs e)
{
// 会话开始时执行
}
void Application_Error(object sender, EventArgs e)
{
// 发生错误时执行
}作用:
- 处理应用程序级别的事件
- 初始化全局变量
- 记录访问统计
- 统一错误处理
| 目录 | 用途 |
|---|---|
bin/ |
编译后的DLL文件 |
App_Code/ |
公共代码类 |
App_Data/ |
数据文件 |
App_WebReferences/ |
Web服务引用 |
5.1.2讲了三种服务器控件,本项目全部实现了!
<!-- 普通HTML标签 + runat="server" -->
<input type="text" runat="server" id="txtInput" />
<button runat="server" id="btnSubmit">提交</button><!-- 使用asp:前缀,功能更强大 -->
<asp:TextBox ID="txtInput" runat="server" />
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" />
<asp:Label ID="lblMessage" runat="server" /><!-- 步骤1:创建用户控件文件 PageHeader.ascx -->
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PageHeader.ascx.cs" Inherits="PageHeader" %>
<div>
<asp:Label ID="lblPageTitle" runat="server" />
<asp:Label ID="lblCurrentTime" runat="server" />
</div>
<!-- 步骤2:在页面中注册用户控件 -->
<%@ Register Src="~/PageHeader.ascx" TagPrefix="uc" TagName="PageHeader" %>
<!-- 步骤3:使用用户控件 -->
<uc:PageHeader ID="PageHeader1" runat="server" PageTitle="首页" />用户控件的特点:
- ✅ 文件扩展名是
.ascx(不是 .aspx) - ✅ 不能独立访问,只能被其他页面引用
- ✅ 可以在多个页面重复使用(写一次,到处用)
- ✅ 可以定义公共属性(如
PageTitle、ShowHomeLink) - ✅ 本项目中三个页面都使用了
PageHeader.ascx控件
必需属性:所有服务器控件都需要 runat="server" 才能在后台访问
// 前台:OnClick 属性指定事件处理方法
<asp:Button ID="btnEncrypt" OnClick="btnEncrypt_Click" />
// 后台:同名方法处理事件
protected void btnEncrypt_Click(object sender, EventArgs e)
{
// 处理按钮点击
}规则:前台事件名 = 后台方法名(必须一致!)
// 存储数据
Session["msgEncoded"] = encryptedMessage;
// 读取数据(推荐方式)
string msg = Session["msgEncoded"] as string;
// 判空(正确方式)
if (string.IsNullOrEmpty(msg))
{
// Session中没有数据
}
// ❌ 错误方式:Session.Count == 0(不可靠)| ❌ 错误 | ✅ 正确 |
|---|---|
Decrpt |
Decrypt |
onclick |
OnClick(首字母大写) |
SqIDataAdapter |
SqlDataAdapter |
ConfigurationSettings |
ConfigurationManager |
<!-- ❌ 错误:有空格 -->
<asp:Button OnClick="btn _Click" />
<!-- ✅ 正确:无空格 -->
<asp:Button OnClick="btn_Click" />// ❌ 错误方式
if (Session.Count == 0) { }
// ✅ 正确方式
if (Session["key"] == null) { }
// 或
if (string.IsNullOrEmpty(Session["key"] as string)) { }// ❌ 错误:写在代码里
string connStr = "Server=...;Database=...;User ID=...;Password=...";
// ✅ 正确:从Web.config读取
string connStr = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;- 打开Visual Studio
- 文件 → 打开 → 网站
- 选择
WebApp_5.1_Demo文件夹 - 按 F5 运行(或点击"启动"按钮)
- 浏览器会自动打开 Sender.aspx
- 在项目文件夹中右键
- 选择"用IIS Express打开"
- 访问:
http://localhost:端口/Sender.aspx
- 打开IIS管理器
- 添加网站,指向
WebApp_5.1_Demo文件夹 - 设置应用程序池为
.NET Framework v4.x - 访问配置的网站地址
- 展示目录结构图
- 打开Web.config,解释各个部分
- 打开Global.asax,演示全局事件
- 强调:配置分离、就近优先
- 打开Sender.aspx,查看控件
- 切换到后台代码,讲解事件
- 运行演示:输入 → 加密 → 跳转 → 解密
- 打开浏览器开发者工具,查看Session
- 让学生找出书上代码的错误(拼写、大小写)
- 修改加密算法(改用AES)
- 添加新控件(下拉框、复选框)
- 简单:修改页面样式,添加CSS美化
- 中等:添加输入验证(不能为空、长度限制)
- 困难:使用数据库存储消息记录
- 高级:改用更安全的AES加密算法
- 教材:《面向服务的计算和WEB数据管理》第5章
- Microsoft文档:ASP.NET Web Forms
- Session文档:ASP.NET Session State
- 理解ASP.NET应用的目录结构
- 会写Web.config配置文件
- 理解Global.asax的作用
- 会使用Web控件(TextBox、Button、Label)
- 理解事件驱动机制(OnClick)
- 会使用Session传递数据
- 知道如何正确判空
- 理解配置分离的重要性
如果遇到问题,请检查:
- Visual Studio版本是否支持.NET Framework 4.8
- IIS Express是否正常运行
- 文件路径中是否包含中文或特殊字符
- Web.config是否有语法错误
祝你学习顺利! 🎉
本示例完全按照教材5.1.1和5.1.2编写,包含详细注释,适合教学演示和学习参考。