开发Web应用程序全解析
立即解锁
发布时间: 2025-08-20 01:13:16 订阅数: 1 


C#面向对象编程与Web服务开发
### 开发 Web 应用程序全解析
#### 1. Web 页面事件处理
在 Web 页面的生命周期中,会触发各种事件,我们可以通过创建事件处理程序来响应这些事件。Web 页面支持自动事件绑定,它会查找具有标准命名的方法,在事件发生时运行这些方法。这些方法通常采用 `Page_event` 的形式,例如,要为页面加载事件绑定事件处理程序,方法名可以命名为 `Page_Load`。
`Page_Load` 事件在页面请求开始时,页面中的控件初始化之后发生。这个事件常用于从服务器控件读取数据并将数据加载到服务器控件中。可以通过查询 `IsPostBack` 属性来判断页面是首次加载还是响应回发事件。以下是一个示例代码,用于在页面回发时在页面上输出一条消息:
```csharp
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write("This is a post back.");
}
}
```
除了 `Page_Load` 事件,还有一些常见的页面事件,如 `Page_Init`、`Page_PreRender` 和 `Page_Unload` 事件,我们也可以为这些事件创建事件处理程序。
#### 2. 控件事件处理
Web 控件和 Windows 图形用户界面(GUI)控件类似,基于事件驱动模型与用户进行交互。当客户端发生事件(如按钮点击)时,事件信息会在客户端被捕获,并通过超文本传输协议(HTTP)回发传输到服务器。在服务器端,事件信息会被事件委托对象拦截,该对象会通知订阅了调用列表的所有事件处理程序方法。虽然听起来很复杂,但 .NET 框架类会将大部分过程进行抽象和封装。
由于通过回发处理事件需要从浏览器到服务器进行往返,会产生一定的开销,因此 Web 表单和服务器控件只公开了有限的事件。像鼠标移动和按键事件等频繁发生的事件,不支持通过服务器端事件处理程序处理,这些事件可以通过用脚本编写的客户端事件处理程序来支持。一个常见的可以使用服务器端事件处理程序响应的事件是按钮点击事件。
以下是页面处理的不同阶段及其描述:
| 阶段 | 描述 |
| --- | --- |
| Load | 如果请求是回发,控件属性会使用从视图状态和控件状态中恢复的信息进行加载。 |
| Postback event handling | 如果请求是回发,会调用控件事件处理程序。之后,会调用所有验证器控件的 `Validate` 方法,该方法会设置各个验证器控件和页面的 `IsValid` 属性。 |
| Rendering | 在渲染之前,会保存页面和所有控件的视图状态。在渲染阶段,页面会为每个控件调用 `Render` 方法。 |
| Unload | 会卸载页面对象(如 `Response` 和 `Request`)并进行清理操作。 |
以下是一个按钮点击事件处理程序的示例代码:
```csharp
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write ("Hello " + this.TextBox1.Text);
}
```
为了将事件绑定到按钮控件,需要在按钮的标记代码中添加 `onClick` 属性。绑定事件响应的控件还必须设置一个在表单容器中唯一的 ID。示例代码如下:
```html
<asp:Button ID="Button1" runat="server" Text="OK" OnClick="Button1_Click"/>
```
按照惯例,控件的事件处理程序方法名是发出事件的对象名,后面跟着下划线和事件名(这与页面级事件处理类似)。不过,事件处理程序的实际名称并不重要。
所有事件处理程序都必须提供两个参数,在事件触发时会传递给该方法。第一个参数是 `sender`,表示发起事件的对象;第二个参数 `e` 的类型为 `System.EventArgs`,是一个用于传递特定事件相关信息的对象。例如,当点击 `DataList` 控件中某一项的编辑按钮时,会触发 `EditCommand` 事件,事件参数 `e` 用于传递关于正在编辑的项的信息。以下代码用于检查 `DataList` 中选择的项是否启用:
```csharp
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
if (e.Item.Enabled)
{
//Add code here.
}
}
```
#### 3. 应用程序和会话事件
除了页面和控件事件,.NET 框架还提供了拦截和响应 Web 会话开始或结束时引发的事件的功能。Web 会话在用户从应用程序请求页面时开始,在会话被放弃或超时结束。除了会话事件,.NET 框架还公开了几个应用程序级事件。`Application_Start` 事件在任何人首次请求 Web 应用程序中的页面时发生,`Application_BeginRequest` 事件在请求任何页面或服务时发生。在结束请求、验证用户、引发错误和停止应用程序时,也会触发相应的事件。会话级和应用程序级事件处理程序位于 `Global.asax.cs` 代码隐藏文件中。
当应用程序启动时,`Global.asax` 会编译成一个动态生成的类,该类派生自 `HttpApplication` 基类。这个类公开并定义了 ASP.NET 应用程序中所有应用程序对象共有的方法、属性和事件。需要注意的是,`Global.asax` 文件是可选的,必须添加到 Web 应用程序中。
#### 4. 创建 Web 应用程序
创建 Web 应用程序可以按照以下步骤进行:
1. 启动 Visual Studio,在“文件”菜单中选择“新建网站”。
2. 选择一个 ASP.NET 空网站,在位置路径末尾更改网站名称为 `activity12_1`。默认情况下,网站存储在 `Documents\Visual Studio 2012\WebSites` 路径下的文件夹中。
3. 在“新建网站”对话框中点击“确定”按钮。
4. 网站创建完成后,需要添加一个 Web 表单。在“网站”菜单下,选择“添加新项”,添加一个名为 `page1.aspx` 的 Web 表单。
5. 此时会显示 Web 页面设计器的源代码视图,点击窗口左下角的标签切换到设计视图。
6. 在设计窗口底部选择 `<div>` 标签。
7. 在“属性”窗口中,选择“样式”属性,点击省略号以打开“修改样式”对话框窗口。在“位置”类别下,将高度设置为 200 像素,然后点击“确定”按钮。
8. 将页面设计窗口切换到拆分模式,从工具箱中拖动一个 `Label` 控件并放到源代码窗格的 `<div>` 标签之间,将文本更改为“Hello Stranger…”,将 ID 更改为 `lblMessage`。
9. 可能会收到一条消息,要求同步设计视图和源代码视图。同步视图后,设计器应类似于相应示例。
10. 按照类似步骤 9 的过程,在 `<div>` 标签之间添加以下控件:
| 控件 | 属性 | 值 |
| --- | --- | --- |
| Label | ID | lblName |
| | Text | Enter your name: |
| TextBox | ID | txtName |
| | Text | [Blank] |
| Button | ID | btnSubmit |
| | Text | Submit |
11. 要定位控件,在设计器中选择控件,在“格式”菜单中选择“设置位置”并勾选“绝对”。
12. 为其余控件开启绝对定位,现在应该可以在可视化设计器中拖动它们进行定位,将控件排列在表单上,使其看起来类似于相应示例。
#### 5. 创建服务器端控件事件处理程序
创建服务器端控件事件处理程序可以按照以下步骤进行:
1. 在设计面板中,双击“提交”按钮。此操作将打开 `Page1.aspx.cs` 代码隐藏页面,并为按钮的点击事件创建一个事件处理程序方法。
2. 在按钮的点击事件处理程序中,检查页面请求是否是回发的结果。如果是,使用 `txtName` 控件中的文本更改 `lblMessage` 的文本为问候语:
```csharp
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (IsPostBack)
{
lblMessage.Text = "Hello " + txtName.Text;
}
}
```
3. 使用“调试”菜单,以调试模式启动页面。首次为 Web 项目启动调试器时,会看到一个对话框,询问是否要在 `Web.config` 文件中启用调试。点击“确定”按钮启用调试。当页面在浏览器中显示时,输入您的姓名并点击“提交”按钮。验证页面重新显示时,问候消息中包含您的姓名。测试完成后,关闭浏览器。
#### 6. 创建非回发服务器控件事件
创建非回发服务器控件事件可以按照以下步骤进行:
1. 使用页面设计器,向 `Page1` 添加一个 `RadioButtonList` 控件,将其定位更改为绝对定位,并将其放置在文本框下方。
2. 将 ID 属性更改为 `rblFontColor`,点击“属性”窗口中的“项”集合,以显示“列表项集合编辑器”对话框,向列表中添加“Black”项和“Red”项。
3. 在 `rblFontColor` 的“属性”窗口中,点击“事件”按钮以显示事件列表。
4. 双击 `SelectedIndexChanged` 事件,这将带您到代码隐藏页面并设置处理该事件的方法。在事件处理程序中添加以下代码,以更改 `lblMessage` 控件的字体颜色:
```csharp
protected void rblFontColor_SelectedIndexChanged(object sender, EventArgs e)
{
if (rblFontColor.SelectedItem.Value == "Red")
{
lblMessage.ForeColor = System.Drawing.Color.Red;
}
else
{
lblMessage.ForeColor = System.Drawing.Color.Black;
}
}
```
5. 使用“调试”菜单,以调试模式启动页面。当页面在浏览器中显示时,点击“Red”单选按钮,注意该事件不会导致回发发生,该事件将排队,直到自动回发事件触发回发。
6. 在 `txtName` 控件中输入您的姓名并点击“提交”按钮。处理回发时,`rblFontColor` 的 `SelectedIndexChanged` 事件和“提交”按钮的 `Click` 事件都会被处理。
7. 测试完成后,关闭浏览器并退出 Visual Studio。
需要注意的是,本节仅探讨了服务器端事件处理。如果浏览器支持客户端脚本和动态 HTML,可以向 .aspx 页面添加 JavaScr
0
0
复制全文
相关推荐








