Skip to content

SummerMi/ASP.NET-DEMO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

📚 5.1.1 & 5.1.2 ASP.NET Web应用示例

项目概述

这是一个完整的ASP.NET Web Forms示例项目,用于演示教材《面向服务的计算和WEB数据管理》第5章5.1节的核心内容:

  • 5.1.1 Web应用的构件(配置文件、目录结构)
  • 5.1.2 服务控件(控件、事件、Session)

🎯 学习目标

通过这个项目,你将学会:

  1. ✅ ASP.NET Web应用的基本结构和文件组织
  2. ✅ Web.config配置文件的作用和写法
  3. ✅ Global.asax全局事件处理
  4. ✅ 服务控件(Web Controls)的使用
  5. ✅ 事件驱动编程(按钮点击事件)
  6. ✅ Session在页面之间传递数据
  7. ✅ 前后台代码分离(.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                     # 本说明文档

🚀 功能演示

完整流程:

  1. Sender.aspx(发送端)

    • 用户在文本框中输入消息(例如:"My password is SuperMan1")
    • 点击 "Encrypt Now" 按钮,消息被加密
    • 加密后的密文显示在页面上,并自动存入Session
    • 点击 "Send to Receiver" 按钮,跳转到接收端
  2. Receiver.aspx(接收端)

    • 页面自动从Session中读取加密的消息
    • 点击 "Decrypt Now" 按钮,消息被解密
    • 原始消息显示在页面上
    • 可以点击 "返回发送端" 回到Sender页面

💡 关键知识点

5.1.1 Web应用的构件

1. Web.config(配置文件)

<connectionStrings>
  <!-- 数据库连接字符串(推荐写法) -->
  <add name="MyConnectionString"
       connectionString="..." />
</connectionStrings>

<appSettings>
  <!-- 应用程序设置 -->
  <add key="SiteName" value="示例网站" />
</appSettings>

重点

  • ✅ 敏感信息(数据库地址、密码)应该放在Web.config中
  • ✅ 不要硬编码在C#代码里
  • ✅ 子目录的Web.config会覆盖父目录的设置(就近优先)

2. Global.asax(全局文件)

void Application_Start(object sender, EventArgs e)
{
    // 应用启动时执行
}

void Session_Start(object sender, EventArgs e)
{
    // 会话开始时执行
}

void Application_Error(object sender, EventArgs e)
{
    // 发生错误时执行
}

作用

  • 处理应用程序级别的事件
  • 初始化全局变量
  • 记录访问统计
  • 统一错误处理

3. 目录结构

目录 用途
bin/ 编译后的DLL文件
App_Code/ 公共代码类
App_Data/ 数据文件
App_WebReferences/ Web服务引用

5.1.2 服务控件

1. 控件类型

5.1.2讲了三种服务器控件,本项目全部实现了!

a) HTML服务器控件
<!-- 普通HTML标签 + runat="server" -->
<input type="text" runat="server" id="txtInput" />
<button runat="server" id="btnSubmit">提交</button>
b) Web服务器控件(推荐)
<!-- 使用asp:前缀,功能更强大 -->
<asp:TextBox ID="txtInput" runat="server" />
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" />
<asp:Label ID="lblMessage" runat="server" />
c) 用户控件(User Control)⭐️ 新增!
<!-- 步骤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)
  • ✅ 不能独立访问,只能被其他页面引用
  • ✅ 可以在多个页面重复使用(写一次,到处用)
  • ✅ 可以定义公共属性(如 PageTitleShowHomeLink
  • ✅ 本项目中三个页面都使用了 PageHeader.ascx 控件

必需属性:所有服务器控件都需要 runat="server" 才能在后台访问

2. 事件处理

// 前台:OnClick 属性指定事件处理方法
<asp:Button ID="btnEncrypt" OnClick="btnEncrypt_Click" />

// 后台:同名方法处理事件
protected void btnEncrypt_Click(object sender, EventArgs e)
{
    // 处理按钮点击
}

规则:前台事件名 = 后台方法名(必须一致!)

3. Session使用

// 存储数据
Session["msgEncoded"] = encryptedMessage;

// 读取数据(推荐方式)
string msg = Session["msgEncoded"] as string;

// 判空(正确方式)
if (string.IsNullOrEmpty(msg))
{
    // Session中没有数据
}

// ❌ 错误方式:Session.Count == 0(不可靠)

⚠️ 常见错误和注意事项

1. 拼写和大小写错误

❌ 错误 ✅ 正确
Decrpt Decrypt
onclick OnClick(首字母大写)
SqIDataAdapter SqlDataAdapter
ConfigurationSettings ConfigurationManager

2. 事件名不一致

<!-- ❌ 错误:有空格 -->
<asp:Button OnClick="btn _Click" />

<!-- ✅ 正确:无空格 -->
<asp:Button OnClick="btn_Click" />

3. Session判空错误

// ❌ 错误方式
if (Session.Count == 0) { }

// ✅ 正确方式
if (Session["key"] == null) { }
// 或
if (string.IsNullOrEmpty(Session["key"] as string)) { }

4. 硬编码连接字符串

// ❌ 错误:写在代码里
string connStr = "Server=...;Database=...;User ID=...;Password=...";

// ✅ 正确:从Web.config读取
string connStr = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

🔧 如何运行

方法1:使用Visual Studio

  1. 打开Visual Studio
  2. 文件 → 打开 → 网站
  3. 选择 WebApp_5.1_Demo 文件夹
  4. 按 F5 运行(或点击"启动"按钮)
  5. 浏览器会自动打开 Sender.aspx

方法2:使用IIS Express

  1. 在项目文件夹中右键
  2. 选择"用IIS Express打开"
  3. 访问:http://localhost:端口/Sender.aspx

方法3:部署到IIS

  1. 打开IIS管理器
  2. 添加网站,指向 WebApp_5.1_Demo 文件夹
  3. 设置应用程序池为 .NET Framework v4.x
  4. 访问配置的网站地址

📝 讲课建议

第一步:讲5.1.1(15分钟)

  1. 展示目录结构图
  2. 打开Web.config,解释各个部分
  3. 打开Global.asax,演示全局事件
  4. 强调:配置分离、就近优先

第二步:讲5.1.2(25分钟)

  1. 打开Sender.aspx,查看控件
  2. 切换到后台代码,讲解事件
  3. 运行演示:输入 → 加密 → 跳转 → 解密
  4. 打开浏览器开发者工具,查看Session

第三步:互动练习(10分钟)

  1. 让学生找出书上代码的错误(拼写、大小写)
  2. 修改加密算法(改用AES)
  3. 添加新控件(下拉框、复选框)

🌟 扩展练习

  1. 简单:修改页面样式,添加CSS美化
  2. 中等:添加输入验证(不能为空、长度限制)
  3. 困难:使用数据库存储消息记录
  4. 高级:改用更安全的AES加密算法

📚 参考资料

🎓 学习检查清单

  • 理解ASP.NET应用的目录结构
  • 会写Web.config配置文件
  • 理解Global.asax的作用
  • 会使用Web控件(TextBox、Button、Label)
  • 理解事件驱动机制(OnClick)
  • 会使用Session传递数据
  • 知道如何正确判空
  • 理解配置分离的重要性

📞 需要帮助?

如果遇到问题,请检查:

  1. Visual Studio版本是否支持.NET Framework 4.8
  2. IIS Express是否正常运行
  3. 文件路径中是否包含中文或特殊字符
  4. Web.config是否有语法错误

祝你学习顺利! 🎉

本示例完全按照教材5.1.1和5.1.2编写,包含详细注释,适合教学演示和学习参考。

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors