WebForms

Web Forms是一种创建ASP.NET网站和Web应用程序的编程模式,它是ASP.NET最古老的编程模式之一。与其他两种模式Web Pages和MVC(Model View Controller模型-视图-控制器)相比,Web Forms具有自己独特的特点和优势。

特点和优势

  1. 事件驱动的网页: Web Forms采用事件驱动的编程模型,类似于Windows桌面应用程序的开发方式。开发人员可以在服务器端编写代码来响应用户在页面上的操作,例如点击按钮、填写表单等。

  2. HTML集成: Web Forms将HTML与服务器端控件和代码无缝集成在一起。开发人员可以在ASP.NET页面中直接编写HTML,并通过添加服务器控件来实现更丰富的交互功能。

  3. 服务器端编译和执行: Web Forms页面在服务器上进行编译和执行,然后由服务器生成HTML,最终呈现为网页。这种方式使得开发人员可以利用服务器端的资源和功能,实现更复杂的逻辑和处理。

  4. 丰富的控件和组件: Web Forms提供了大量的Web控件和组件,用于创建具有数据访问功能的用户驱动网站。这些控件包括TextBox、Button、GridView等,可以简化开发过程并提高开发效率。

  5. ViewState: Web Forms引入了ViewState机制,用于在页面请求之间保持控件状态和数据。这使得开发人员可以方便地管理页面上的控件状态,而无需手动处理每个控件的状态。

  6. 易于学习和使用: 对于那些熟悉Windows桌面应用程序开发的开发人员来说,使用Web Forms开发Web应用程序会更加容易上手,因为它们采用了相似的编程模型和开发方式。


页面

WebForms中的页面是通过ASP.NET技术创建的,它允许开发人员使用类似于Windows桌面应用程序的事件驱动模型构建Web应用程序。

ASP.NET Web Forms - HTML 页面

简单的ASP.NET页面看上去就像普通的HTML页面。

Hello RUNOOB.COM

在开始学习ASP.NET之前,我们先来构建一个简单的HTML页面,该页面将在浏览器中显示 "Hello RUNOOB.COM":

1
2
3
4
5
6
7
<html>
<body bgcolor="yellow">
<center>
<h2>Hello RUNOOB.COM!</h2>
</center>
</body>
</html>

用 HTML 编写的 Hello RUNOOB.COM

下面的代码将以HTML页面的形式显示实例:

1
2
3
4
5
6
7
<html>
<body bgcolor="yellow">
<center>
<h2>Hello RUNOOB.COM!</h2>
</center>
</body>
</html>

用 ASP.NET 编写的 Hello RUNOOB.COM

转换HTML页面为ASP.NET页面最简单的方法是,直接复制一个HTML文件,并把新文件的扩展名改成.aspx。

下面的代码将以ASP.NET页面的形式显示实例:

1
2
3
4
5
6
7
<html>
<body bgcolor="yellow">
<center>
<h2>Hello RUNOOB.COM!</h2>
</center>
</body>
</html>
  • <html>: HTML文档的根元素,表示HTML文档的开始。
  • <body bgcolor="yellow">: <body>标记表示文档的主体内容,bgcolor="yellow"属性设置了背景颜色为黄色。
  • <center>: <center>标记用于将其中的内容居中显示,尽管现在已经不推荐使用,因为它已被HTML5废弃,可以使用CSS的text-align: center;来代替。
  • <h2>Hello RUNOOB.COM!</h2>: <h2>标记表示标题,数字表示标题的级别,这里是二级标题,显示为较大的文本。其中的文本内容是 "Hello RUNOOB.COM!"。
  • </center>: 结束了内容的居中显示。
  • </body>: 结束了文档的主体内容。
  • </html>: 结束了HTML文档。

它是如何工作的?

  1. HTML页面与ASP.NET页面的基本概念

    • HTML页面是由HTML标记语言编写的,它定义了页面的结构和内容。
    • ASP.NET页面是由ASP.NET框架处理的动态页面,它可以包含HTML标记以及服务器端代码,如C#或VB.NET等。
  2. HTML页面与ASP.NET页面的扩展名

    • HTML页面的扩展名通常是.htm或.html。当浏览器请求一个HTML页面时,服务器将直接将该页面发送给浏览器,不需要对其进行任何处理。
    • ASP.NET页面的扩展名是.aspx。当浏览器请求一个ASP.NET页面时,服务器会先处理其中的服务器端代码,生成最终的HTML页面,然后再将该页面发送给浏览器。
  3. ASP.NET页面的处理过程

    • 当浏览器请求一个ASP.NET页面时,服务器会先处理其中的服务器端代码,这些代码可以访问服务器资源、执行逻辑操作等。
    • 在处理完服务器端代码后,服务器将生成最终的HTML页面,并将其发送给浏览器进行显示。
  4. 静态HTML页面与动态ASP.NET页面的区别

    • 静态HTML页面是固定的,内容不会随着时间或用户操作而改变。
    • 动态ASP.NET页面可以根据用户请求、数据库查询结果或其他条件生成不同的内容,因此其内容是可变的。

用 ASP .NET 编写的动态页面

下面的代码将以ASP.NET页面的形式显示实例:

1
2
3
4
5
6
7
8
<html>
<body bgcolor="yellow">
<center>
<h2>Hello RUNOOB.COM!</h2>
<p><%Response.Write(now())%></p>
</center>
</body>
</html>

控件

WebForms控件是用于在Web页面上显示交互式元素的元素。通过使用这些控件,开发人员可以轻松地向页面添加各种功能和用户界面元素,而无需手动编写大量的HTML和JavaScript代码。以下是一些常见的WebForms控件:

TextBox(文本框)

TextBox控件用于接受用户输入的文本。它允许用户在Web页面上输入文本信息,并且可以与其他控件进行数据交互。

1
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>

这行代码是一个ASP.NET WebForms中的TextBox控件的声明。

  • <asp:TextBox>: 这是ASP.NET WebForms中的一个服务器端控件的标记。它表示一个文本框控件,用户可以在页面上输入文本。

  • ID="txtName": 这是TextBox控件的ID属性,用于在服务器端代码中唯一标识这个控件。在服务器端代码中,可以使用这个ID来引用这个控件,并对其进行操作。

  • runat="server": 这是ASP.NET服务器端控件的一个必需属性,它告诉ASP.NET引擎该标记是一个服务器端控件,需要在服务器端进行处理。

  • </asp:TextBox>: 这是TextBox控件的结束标记,表示控件的声明结束。

因此,这行代码声明了一个TextBox控件,其在Web页面中的ID为"txtName",可以在服务器端代码中访问和操作它。

Button(按钮)

Button控件用于触发特定的操作或事件。当用户点击按钮时,可以执行与按钮相关联的服务器端代码。

1
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click"></asp:Button>

这行代码是一个ASP.NET WebForms中的Button控件的声明。让我来解释其中的各个部分:

  • <asp:Button>: 这是ASP.NET WebForms中的一个服务器端控件的标记。它表示一个按钮控件,用户可以点击它执行某些操作。

  • ID="btnSubmit": 这是Button控件的ID属性,用于在服务器端代码中唯一标识这个控件。在服务器端代码中,可以使用这个ID来引用这个控件,并对其进行操作。

  • runat="server": 这是ASP.NET服务器端控件的一个必需属性,它告诉ASP.NET引擎该标记是一个服务器端控件,需要在服务器端进行处理。

  • Text="Submit": 这是Button控件的Text属性,用于设置按钮上显示的文本内容。

  • OnClick="btnSubmit_Click": 这是Button控件的OnClick事件,指定了在用户点击按钮时要执行的服务器端代码的方法。在这个例子中,当按钮被点击时,会执行名为"btnSubmit_Click"的方法。

  • </asp:Button>: 这是Button控件的结束标记,表示控件的声明结束。

因此,这行代码声明了一个Button控件,其在Web页面中的ID为"btnSubmit",显示的文本为"Submit",并且指定了当用户点击按钮时要执行的服务器端代码方法为"btnSubmit_Click"。

1
2
3
4
protected void btnSubmit_Click(object sender, EventArgs e)
{
// 处理按钮点击事件的代码
}

Label(标签)

Label控件用于在页面上显示文本或其他内容。它通常用于显示静态文本或动态生成的信息。

1
<asp:Label ID="lblMessage" runat="server" Text="Welcome"></asp:Label>

这行代码是一个ASP.NET WebForms中的Label控件的声明。让我来解释其中的各个部分:

  • <asp:Label>: 这是ASP.NET WebForms中的一个服务器端控件的标记。它表示一个标签控件,用于在页面上显示文本或其他内容。

  • ID="lblMessage": 这是Label控件的ID属性,用于在服务器端代码中唯一标识这个控件。在服务器端代码中,可以使用这个ID来引用这个控件,并对其进行操作。

  • runat="server": 这是ASP.NET服务器端控件的一个必需属性,它告诉ASP.NET引擎该标记是一个服务器端控件,需要在服务器端进行处理。

  • Text="Welcome": 这是Label控件的Text属性,用于设置标签上显示的文本内容。在这个例子中,文本内容被设置为"Welcome"。

  • </asp:Label>: 这是Label控件的结束标记,表示控件的声明结束。

因此,这行代码声明了一个Label控件,其在Web页面中的ID为"lblMessage",显示的文本为"Welcome"。

DropDownList控件允许用户从预定义的选项列表中选择一个值。它通常用于实现下拉选择菜单。

1
2
3
4
5
<asp:DropDownList ID="ddlOptions" runat="server">
<asp:ListItem Text="Option 1" Value="1"></asp:ListItem>
<asp:ListItem Text="Option 2" Value="2"></asp:ListItem>
<asp:ListItem Text="Option 3" Value="3"></asp:ListItem>
</asp:DropDownList>

这段代码是一个ASP.NET WebForms中的DropDownList控件的声明,用于创建一个下拉列表框。让我逐步解释其中的各个部分:

  • <asp:DropDownList>: 这是ASP.NET WebForms中的一个服务器端控件的标记。它表示一个下拉列表框控件,用户可以从预定义的选项中选择一个值。

  • ID="ddlOptions": 这是DropDownList控件的ID属性,用于在服务器端代码中唯一标识这个控件。在服务器端代码中,可以使用这个ID来引用这个控件,并对其进行操作。

  • runat="server": 这是ASP.NET服务器端控件的一个必需属性,它告诉ASP.NET引擎该标记是一个服务器端控件,需要在服务器端进行处理。

  • <asp:ListItem>: 这是DropDownList控件内部的一个子标记,表示一个列表项。每个列表项都有一个Text属性和一个Value属性,分别表示显示的文本和该项的值。

  • Text="Option 1" Value="1": 这是第一个列表项的设置,显示的文本为"Option 1",值为"1"。

  • </asp:DropDownList>: 这是DropDownList控件的结束标记,表示控件的声明结束。

因此,这段代码声明了一个DropDownList控件,其在Web页面中的ID为"ddlOptions",并包含了三个列表项,分别是"Option 1"、"Option 2"和"Option 3",对应的值分别为"1"、"2"和"3"。

GridView(网格视图)

GridView控件用于在Web页面上显示数据,并且可以支持排序、分页和编辑等功能。它通常与数据源控件结合使用。

1
2
3
4
5
6
<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" />
</Columns>
</asp:GridView>

这段代码是一个ASP.NET WebForms中的GridView控件的声明,用于在页面上显示数据。让我逐步解释其中的各个部分:

  • <asp:GridView>: 这是ASP.NET WebForms中的一个服务器端控件的标记。它表示一个GridView控件,用于在页面上显示数据,并支持排序、分页和编辑等功能。

  • ID="gvData": 这是GridView控件的ID属性,用于在服务器端代码中唯一标识这个控件。在服务器端代码中,可以使用这个ID来引用这个控件,并对其进行操作。

  • runat="server": 这是ASP.NET服务器端控件的一个必需属性,它告诉ASP.NET引擎该标记是一个服务器端控件,需要在服务器端进行处理。

  • AutoGenerateColumns="False": 这是GridView控件的AutoGenerateColumns属性,用于指定是否自动生成列。在这个例子中,它被设置为False,表示列不会自动生成,而是通过手动添加列来显示数据。

  • <Columns>: 这是GridView控件内部的一个子标记,表示GridView的列集合。

  • <asp:BoundField>: 这是GridView控件内部的一个子标记,表示一个绑定字段列。BoundField列用于显示数据源中的特定字段的值。

  • DataField="ID": 这是BoundField列的DataField属性,指定要在该列中显示的数据源字段的名称。

  • HeaderText="ID": 这是BoundField列的HeaderText属性,用于设置列的标题文本。

  • </Columns>: 这是GridView控件内部子标记的结束标记,表示列集合的声明结束。

  • </asp:GridView>: 这是GridView控件的结束标记,表示控件的声明结束。

因此,这段代码声明了一个GridView控件,其在Web页面中的ID为"gvData",并包含了两个列:一个显示"ID"字段的列,另一个显示"Name"字段的列。

这些只是WebForms中可用控件的几个示例。

以下是大体的全控件:

ASP.NET Web 服务器控件知识点

ASP.NET Web 服务器控件是用于在 Web 页面上创建交互式用户界面的元素。它们可以在服务器端执行,生成 HTML,并在 Web 浏览器中呈现。以下是一些常见的 ASP.NET Web 服务器控件的知识点:

  1. TextBox 控件:用于在页面上接收用户输入的文本。
  2. Button 控件:用于触发特定的操作或事件,如提交表单或执行服务器端代码。
  3. Label 控件:用于在页面上显示文本或其他内容,通常用于显示静态文本或动态生成的信息。
  4. DropDownList 控件:用于创建下拉列表框,允许用户从预定义的选项中选择一个值。
  5. GridView 控件:用于在页面上显示数据,支持排序、分页和编辑等功能。
  6. CheckBox 控件:用于创建复选框,允许用户选择一个或多个选项。
  7. RadioButton 控件:用于创建单选按钮,允许用户从一组选项中选择一个。
  8. FileUpload 控件:用于在页面上上传文件。
  9. Panel 控件:用于创建一个逻辑容器,可以在其中组织其他控件。
  10. Validation 控件:用于执行表单验证,确保用户输入的数据符合特定的规则或条件。

ASP.NET Validation 服务器控件知识点

ASP.NET Validation 服务器控件用于在 Web 表单中执行客户端和服务器端的验证,确保用户输入的数据符合特定的规则或条件。以下是一些常见的 ASP.NET Validation 服务器控件的知识点:

  1. RequiredFieldValidator 控件:用于确保输入字段不为空。
  2. RangeValidator 控件:用于确保输入字段的值在指定的范围内。
  3. RegularExpressionValidator 控件:用于确保输入字段的值与指定的正则表达式模式匹配。
  4. CompareValidator 控件:用于比较两个输入字段的值,确保它们满足指定的条件。
  5. CustomValidator 控件:用于执行自定义的客户端和服务器端验证。
  6. ValidationSummary 控件:用于显示页面上所有验证控件的摘要信息。

代码示例

下面是一些常见 ASP.NET Validation 服务器控件的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- RequiredFieldValidator 控件示例 -->
<asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvUsername" runat="server" ControlToValidate="txtUsername" ErrorMessage="Username is required" />

<!-- RangeValidator 控件示例 -->
<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
<asp:RangeValidator ID="rvAge" runat="server" ControlToValidate="txtAge" ErrorMessage="Age must be between 18 and 65" MinimumValue="18" MaximumValue="65" Type="Integer" />

<!-- RegularExpressionValidator 控件示例 -->
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="revEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="Invalid email address" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />

<!-- CompareValidator 控件示例 -->
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
<asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"></asp:TextBox>
<asp:CompareValidator ID="cvPassword" runat="server" ControlToValidate="txtConfirmPassword" ControlToCompare="txtPassword" ErrorMessage="Passwords do not match" />

<!-- CustomValidator 控件示例 -->
<asp:TextBox ID="txtCustom" runat="server"></asp:TextBox>
<asp:CustomValidator ID="cvCustom" runat="server" ControlToValidate="txtCustom" ErrorMessage="Custom validation failed" OnServerValidate="CustomValidation_ServerValidate" />

<!-- ValidationSummary 控件示例 -->
<asp:ValidationSummary ID="vsSummary" runat="server" />

对第一个进行解释:

  1. <asp:TextBox>: 这是一个服务器端控件的标记,表示一个文本框控件,用于接收用户输入的文本。它具有ID属性,指定了文本框的唯一标识符,并且具有runat="server"属性,表示它是一个服务器端控件,需要在服务器端进行处理。

  2. <asp:RequiredFieldValidator>: 这是一个服务器端控件的标记,表示一个必填字段验证器控件,用于确保相关控件(在本例中为txtUsername)的值不为空。它具有ID属性,指定了验证器的唯一标识符,并且具有runat="server"属性,表示它是一个服务器端控件。ControlToValidate属性指定了要验证的目标控件(在本例中为txtUsername)。ErrorMessage属性指定了当验证失败时要显示的错误消息。

  3. ID="txtUsername": 这是文本框控件的ID属性,用于在服务器端代码中唯一标识这个控件。

  4. ID="rfvUsername": 这是必填字段验证器控件的ID属性,用于在服务器端代码中唯一标识这个验证器。

  5. ControlToValidate="txtUsername": 这是必填字段验证器控件的ControlToValidate属性,指定了要验证的目标控件的ID。在这个例子中,它指定了要验证的文本框控件的ID为txtUsername。

  6. ErrorMessage="Username is required": 这是必填字段验证器控件的ErrorMessage属性,指定了当验证失败时要显示的错误消息。在这个例子中,它指定了当用户名为空时显示的错误消息为"Username is required"。

这段代码的作用是,在用户未输入用户名时,显示错误消息"Username is required",提示用户该字段为必填字段。

以上是一些基本的 ASP.NET Validation 服务器控件的示例代码。通过使用这些控件,可以轻松地添加验证逻辑到 Web 表单中,确保用户输入的数据的有效性。


事件

在ASP.NET WebForms中,事件是在用户与页面上的控件交互时触发的动作。开发人员可以编写事件处理程序来响应这些事件,执行特定的操作或逻辑。以下是一些与事件相关的知识点:

ASP.NET - 事件句柄

事件句柄是用于处理特定事件的方法或函数。在ASP.NET中,事件句柄通常是在代码文件中定义的方法,用于处理页面或控件的特定事件。事件句柄通常采用特定的命名约定,以便ASP.NET框架能够自动将其与相应的事件关联起来。

Page_Load 事件

Page_Load事件是ASP.NET页面生命周期中的一个重要事件,它在页面加载时触发。在Page_Load事件中,可以执行一些初始化操作,设置页面上的控件属性,或者处理页面上的其他逻辑。Page_Load事件通常用于在页面加载完成后执行一些代码。

1
2
3
4
protected void Page_Load(object sender, EventArgs e)
{
// 在页面加载时执行的代码
}

Page.IsPostBack 属性

Page.IsPostBack属性是一个布尔值,用于确定页面是否是由提交回发引起的。当用户对页面进行回发时(如点击按钮提交表单),页面会重新加载,但IsPostBack属性将为true。这允许开发人员在页面加载时区分初始加载和回发加载,并采取相应的行动。

1
2
3
4
5
6
7
8
9
10
11
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 页面首次加载时执行的代码
}
else
{
// 页面回发加载时执行的代码
}
}

通过理解这些事件相关的知识点,开发人员可以更好地处理页面和控件的交互,实现更复杂的Web应用程序逻辑。

下面是一个完整的ASP.NET WebForms页面的代码示例,涵盖了事件处理和Page_Load事件的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EventExample.aspx.cs" Inherits="WebApplication.EventExample" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Event Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Event Example</h1>
<asp:Button ID="btnClickMe" runat="server" Text="Click Me" OnClick="btnClickMe_Click" />
<br />
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>

在这个示例中,有一个Button控件和一个Label控件。当用户点击按钮时,将触发btnClickMe_Click事件处理程序,并在Label控件中显示一条消息。

接下来是与此页面相关的代码文件EventExample.aspx.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Web.UI;

namespace WebApplication
{
public partial class EventExample : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 页面首次加载时执行的代码
lblMessage.Text = "Welcome to Event Example!";
}
}

protected void btnClickMe_Click(object sender, EventArgs e)
{
// 当用户点击按钮时执行的代码
lblMessage.Text = "Button Clicked!";
}
}
}

在这个代码文件中,Page_Load事件处理程序用于在页面加载时初始化Label控件的文本,而btnClickMe_Click事件处理程序用于处理用户点击按钮时的操作,并更新Label控件的文本。

通过这个示例,你可以看到如何在ASP.NET WebForms中处理事件,并在页面加载和用户交互时执行相应的操作。


表单

在ASP.NET WebForms中,表单(Form)是一个用于收集用户输入数据的重要组件。它允许开发人员创建包含各种控件的交互式页面,并处理用户提交的数据。以下是与ASP.NET Web表单相关的一些知识点:

ASP.NET Web 表单

ASP.NET Web表单是包含在<form>标记中的一组服务器控件和HTML元素。这些控件和元素可以接收用户的输入,例如文本框、复选框、下拉列表等。Web表单还可以包含按钮等控件,用于触发提交或其他操作。

提交表单

当用户在页面上输入数据并点击提交按钮时,表单中的数据将被发送到服务器进行处理。在ASP.NET中,可以使用按钮控件(如Button或ImageButton)或输入类型为“submit”的HTML元素来提交表单。提交表单后,服务器端代码可以通过事件处理程序来处理接收到的数据,并执行相应的操作,如数据验证、数据处理、页面导航等。

示例

下面是一个简单的ASP.NET Web表单的示例,包括一些常见的表单控件和一个提交按钮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FormExample.aspx.cs" Inherits="WebApplication.FormExample" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Form Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Form Example</h1>
<asp:TextBox ID="txtName" runat="server" placeholder="Enter your name" /><br />
<asp:DropDownList ID="ddlGender" runat="server">
<asp:ListItem Text="Male" Value="M" />
<asp:ListItem Text="Female" Value="F" />
</asp:DropDownList><br />
<asp:CheckBox ID="chkSubscribe" runat="server" Text="Subscribe to newsletter" /><br />
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
</div>
</form>
</body>
</html>

这段代码是一个简单的ASP.NET WebForms页面,用于展示一个表单,并包含一些常见的表单控件,如TextBox、DropDownList、CheckBox和Button。

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FormExample.aspx.cs" Inherits="WebApplication.FormExample" %>:这是一个指令,用于定义页面的编程语言(C#)、代码后台文件的名称(FormExample.aspx.cs)以及页面的类名(WebApplication.FormExample)。这个指令告诉ASP.NET引擎如何处理页面。

  2. <html xmlns="http://www.w3.org/1999/xhtml">:这是HTML文档的根元素,命名空间xmlns属性指定了XHTML的命名空间。

  3. <head runat="server">:这是一个服务器端标记,表示页面的头部区域。其中的runat="server"属性告诉ASP.NET引擎这是一个服务器端控件。

  4. <title>Form Example</title>:这是页面的标题,显示在浏览器的标题栏中。

  5. <body>:这是页面的主体部分。

  6. <form id="form1" runat="server">:这是一个服务器端表单控件。它具有ID属性和runat="server"属性,表示这是一个服务器端控件,并且可以在服务器端进行处理。

  7. <asp:TextBox ID="txtName" runat="server" placeholder="Enter your name" />:这是一个TextBox服务器端控件,用于接收用户输入的文本。它具有ID属性,指定了控件的唯一标识符,并且具有placeholder属性,用于在文本框中显示占位符文本。

  8. <asp:DropDownList ID="ddlGender" runat="server">...</asp:DropDownList>:这是一个DropDownList服务器端控件,用于创建下拉列表框。它包含两个ListItem子元素,分别代表“Male”和“Female”选项。

  9. <asp:CheckBox ID="chkSubscribe" runat="server" Text="Subscribe to newsletter" />:这是一个CheckBox服务器端控件,用于创建复选框。它具有ID属性和Text属性,分别指定控件的唯一标识符和显示的文本。

  10. <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />:这是一个Button服务器端控件,用于创建提交按钮。它具有ID属性、Text属性和OnClick事件,分别指定控件的唯一标识符、显示的文本和点击按钮时触发的事件处理程序。

  11. </form>:这是form控件的结束标记。

  12. </body>:这是页面主体部分的结束标记。

  13. </html>:这是HTML文档的结束标记。

这个页面展示了一个简单的表单,用户可以在文本框中输入姓名,通过下拉列表框选择性别,勾选复选框订阅通讯,然后点击提交按钮。提交按钮点击后将触发名为btnSubmit_Click的事件处理程序,在事件处理程序中可以处理表单提交的数据。

接下来是与此页面相关的代码文件FormExample.aspx.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Web.UI;

namespace WebApplication
{
public partial class FormExample : Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 在页面加载时执行的代码
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
// 当用户点击提交按钮时执行的代码
string name = txtName.Text;
string gender = ddlGender.SelectedValue;
bool subscribe = chkSubscribe.Checked;

// 在此处处理接收到的数据,如保存到数据库、发送邮件等
}
}
}

在这个代码文件中,我们定义了一个事件处理程序btnSubmit_Click,用于处理用户提交表单时的操作。在这个事件处理程序中,我们可以通过表单控件的ID来获取用户输入的数据,并在代码中进行处理。


ViewState(视图状态)

在ASP.NET WebForms中,ViewState是一种用于在页面请求之间维持控件状态和数据的机制。它允许开发人员在页面的不同请求之间保持页面上控件的状态,包括其属性值、用户输入等。以下是ViewState的一些知识点:

维持 ViewState

  1. ViewState的工作原理
    • 在每个页面请求之间,ASP.NET会将页面的状态保存在隐藏字段中,这个隐藏字段称为ViewState。
    • ViewState中包含了页面上每个控件的状态信息,以及在页面生命周期中所做的任何更改。
  2. 启用和禁用 ViewState
    • 对于某些情况下不需要维持控件状态的页面,可以通过将控件的EnableViewState属性设置为false来禁用ViewState,以减少页面大小和提高性能。
    • 默认情况下,大多数服务器控件的EnableViewState属性都是true,表示启用ViewState。
  3. ViewState的大小限制
    • ViewState的大小是有限制的,通常限制在几千字节到几百千字节之间,具体取决于服务器配置和浏览器支持。
    • 当ViewState超过限制时,可能会导致性能下降、页面加载时间延长等问题。
  4. ViewState的安全性
    • ViewState中保存的数据在客户端和服务器之间进行了加密,但并不是绝对安全的。
    • 为了确保敏感信息的安全性,不应该将敏感数据保存在ViewState中,而是应该保存在服务器端的安全位置。
  5. 使用ViewState的注意事项
    • ViewState可能会增加页面大小,影响页面加载时间和网络传输。
    • 不应该滥用ViewState,仅在需要时使用,避免保存大量数据或敏感信息。

通过正确地使用ViewState,开发人员可以在ASP.NET WebForms中方便地维持控件状态和数据,提升用户体验和页面交互性。

下面是一个简单的ASP.NET WebForms页面的示例,演示了如何使用ViewState来保存和恢复控件的状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewStateExample.aspx.cs" Inherits="WebApplication.ViewStateExample" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>ViewState Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>ViewState Example</h1>
<asp:TextBox ID="txtName" runat="server" /><br />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>

接下来是与页面相关的代码文件ViewStateExample.aspx.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;

namespace WebApplication
{
public partial class ViewStateExample : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 页面首次加载时初始化控件状态
txtName.Text = ViewState["Name"] as string ?? "";
}
}

protected void btnSave_Click(object sender, EventArgs e)
{
// 当用户点击保存按钮时,保存控件状态到ViewState
ViewState["Name"] = txtName.Text;
lblMessage.Text = "State saved successfully!";
}
}
}

这段代码是一个名为ViewStateExample的ASP.NET WebForms页面的代码文件。

  1. namespace WebApplication:这个页面所在的命名空间为WebApplication。

  2. public partial class ViewStateExample : System.Web.UI.Page:这是ViewStateExample类的声明,它是System.Web.UI.Page类的一个部分类(partial class),表示这个类是一个页面的代码后台。

  3. protected void Page_Load(object sender, EventArgs e):这是Page_Load事件处理程序,它在页面加载时执行。在这个事件处理程序中,我们检查了页面是否是首次加载(IsPostBack属性),如果是首次加载,则从ViewState中恢复保存的姓名并显示在文本框中。

  4. protected void btnSave_Click(object sender, EventArgs e):这是btnSave按钮的Click事件处理程序,它在用户点击保存按钮时执行。在这个事件处理程序中,我们将文本框中的姓名保存到ViewState中,并在页面下方的消息标签中显示一条消息。

  5. ViewState["Name"] = txtName.Text;:这行代码将文本框中的姓名保存到ViewState中,键名为"Name"。

  6. txtName.Text = ViewState["Name"] as string ?? "";:这行代码从ViewState中恢复保存的姓名,并将其显示在文本框中。如果ViewState中没有保存的姓名,则使用空字符串作为默认值。

  7. lblMessage.Text = "State saved successfully!";:这行代码将消息标签的文本设置为"State saved successfully!",用于提示用户状态保存成功。


TextBox

TextBox是ASP.NET WebForms中常用的文本输入控件,用于允许用户在Web页面上输入文本信息。以下是TextBox的一些知识点和代码示例:

特点和用途:

  • 接受用户输入:TextBox允许用户在Web页面上输入文本,包括单行文本和多行文本。

  • 支持文本格式化:TextBox可以设置各种文本格式,如数字、日期等。

  • 常见应用场景:常见用途包括用户登录、注册、搜索框等需要用户输入文本的场景。

示例代码:

1
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>

上面的代码创建了一个简单的TextBox控件,其属性包括:

  • ID="txtName":指定了TextBox的唯一标识符,可以在代码中引用该控件。

  • runat="server":表示该控件是一个服务器端控件,可以在服务器端进行处理。

设置TextBox的属性:

1
<asp:TextBox ID="txtAge" runat="server" TextMode="Number" MaxLength="3"></asp:TextBox>

在这个示例中,我们设置了TextBox的TextMode属性为"Number",这样用户只能输入数字;同时设置了MaxLength属性为3,限制用户输入的最大字符数为3。

获取TextBox中的值:

1
string name = txtName.Text;

在服务器端代码中,可以通过TextBox的Text属性来获取用户输入的值。例如,上面的代码将获取名为txtName的TextBox中的文本值,并将其存储在name变量中。


Button

Button是ASP.NET WebForms中常用的控件之一,用于在Web页面上触发操作。用户点击按钮时,可以执行与按钮相关联的事件处理程序。以下是Button的一些知识点和代码示例:

特点和用途:

  • 触发事件:Button控件允许用户在Web页面上执行操作,并触发与按钮相关联的事件处理程序。

  • 执行后台逻辑:通过与服务器端代码相关联的事件处理程序,Button可以执行后台逻辑,如数据处理、页面跳转等。

  • 常见应用场景:常见用途包括提交表单、触发数据保存操作、执行搜索等需要用户主动触发的操作。

示例代码:

1
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />

上面的代码创建了一个简单的Button控件,其属性包括:

  • ID="btnSubmit":指定了Button的唯一标识符,可以在代码中引用该控件。

  • runat="server":表示该控件是一个服务器端控件,可以在服务器端进行处理。

  • Text="Submit":指定了按钮上显示的文本。

  • OnClick="btnSubmit_Click":指定了与按钮相关联的点击事件处理程序。

与事件处理程序相关联:

在代码后台文件中,需要定义与按钮相关联的事件处理程序。例如:

1
2
3
4
protected void btnSubmit_Click(object sender, EventArgs e)
{
// 在此处编写按钮点击事件的处理逻辑
}

当用户点击按钮时,将触发btnSubmit_Click事件处理程序,并执行其中的逻辑。开发人员可以在这个事件处理程序中编写与按钮点击相关的后台逻辑,如数据保存、页面跳转等。


数据绑定

数据绑定是将数据源与控件关联以显示数据的过程。在ASP.NET WebForms中,开发人员可以使用数据绑定来显示数据库中的数据、集合中的数据或其他数据源中的数据。以下是一些支持数据绑定的常见列表控件:

asp:RadioButtonList

RadioButtonList控件用于在Web页面上显示单选按钮列表。通过数据绑定,可以将数据源中的数据与RadioButtonList控件关联,使用户可以从中选择一个选项。

asp:CheckBoxList

CheckBoxList控件用于在Web页面上显示复选框列表。与RadioButtonList类似,通过数据绑定,可以将数据源中的数据与CheckBoxList控件关联,允许用户选择多个选项。

asp:DropDownList

DropDownList控件用于在Web页面上显示下拉列表框。通过数据绑定,可以将数据源中的数据与DropDownList控件关联,使用户可以从下拉列表中选择一个选项。

asp:ListBox

ListBox控件用于在Web页面上显示列表框,允许用户选择一个或多个选项。通过数据绑定,可以将数据源中的数据与ListBox控件关联,使用户可以从中选择一个或多个选项。

代码示例:

1
2
3
4
5
<asp:DropDownList ID="ddlOptions" runat="server">
<asp:ListItem Text="Option 1" Value="1"></asp:ListItem>
<asp:ListItem Text="Option 2" Value="2"></asp:ListItem>
<asp:ListItem Text="Option 3" Value="3"></asp:ListItem>
</asp:DropDownList>

上面的代码创建了一个DropDownList控件,并通过元素手动添加了三个选项。这些选项可以是静态的,也可以通过数据绑定从数据源中动态获取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 数据绑定
ddlOptions.DataSource = GetOptions(); // 获取数据源
ddlOptions.DataTextField = "Text"; // 设置数据源中用于显示文本的字段
ddlOptions.DataValueField = "Value"; // 设置数据源中用于保存值的字段
ddlOptions.DataBind(); // 绑定数据源到DropDownList控件
}
}

// 模拟数据源
private DataTable GetOptions()
{
DataTable dt = new DataTable();
dt.Columns.Add("Text");
dt.Columns.Add("Value");
dt.Rows.Add("Option 1", "1");
dt.Rows.Add("Option 2", "2");
dt.Rows.Add("Option 3", "3");
return dt;
}

在Page_Load事件中,我们检查页面是否是首次加载(IsPostBack属性),如果是首次加载,则进行数据绑定。通过设置DropDownList的DataSource属性为数据源,并指定DataTextField和DataValueField属性来设置数据源中的字段用于显示文本和保存值。最后调用DataBind方法将数据源绑定到DropDownList控件上。

通过这样的数据绑定方式,可以轻松地将数据显示在列表控件上,提供更丰富的用户交互和选择功能。


ArrayList

ArrayList是.NET Framework中的一种集合类型,用于在内存中存储对象的动态数组。它允许在数组末尾动态添加或删除元素,并可以通过索引来访问数组中的元素。在ASP.NET WebForms中,ArrayList常用于临时存储和管理数据。以下是ArrayList的一些知识点和代码示例:

特点和用途:

  • 动态大小:ArrayList可以根据需要自动增长或缩小大小。

  • 任意类型:ArrayList可以存储任意类型的对象,因此非常灵活。

  • 常见应用场景:常见用途包括临时存储数据、数据集合的操作和临时缓存数据等。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System.Collections;

// 创建一个ArrayList对象
ArrayList list = new ArrayList();

// 向ArrayList中添加元素
list.Add("Apple");
list.Add("Banana");
list.Add("Orange");

// 访问ArrayList中的元素
string fruit1 = (string)list[0];
string fruit2 = (string)list[1];

// 删除ArrayList中的元素
list.Remove("Banana");

// 获取ArrayList的大小
int size = list.Count;

上面的代码展示了如何使用ArrayList。首先,我们创建了一个ArrayList对象,并向其中添加了一些元素。然后,我们通过索引访问了ArrayList中的元素,并删除了一个元素。最后,我们使用Count属性获取了ArrayList的大小。

绑定数据到 ArrayList:

1
2
3
4
5
6
7
8
9
ArrayList users = new ArrayList();
users.Add(new User("John", 25));
users.Add(new User("Alice", 30));

// 将ArrayList绑定到DropDownList控件
ddlUsers.DataSource = users;
ddlUsers.DataTextField = "Name";
ddlUsers.DataValueField = "Age";
ddlUsers.DataBind();

在这个示例中,我们首先创建了一个包含用户对象的ArrayList。然后,我们将ArrayList绑定到一个DropDownList控件上,通过设置DataTextField和DataValueField属性来指定绑定的数据源中的字段,最后调用DataBind方法完成数据绑定。

通过ArrayList,开发人员可以灵活地处理和管理数据集合,实现丰富的数据操作和交互功能。


Hashtable(哈希表)

Hashtable是.NET Framework中的一种集合类型,用于在内存中存储键值对。它提供了一种快速查找数据的方式,通过使用哈希函数将键转换为索引,并在常量时间内定位数据。在ASP.NET WebForms中,Hashtable常用于以键值对形式存储和检索数据。以下是Hashtable的一些知识点和代码示例:

特点和用途:

  • 键值对存储:Hashtable存储的数据以键值对的形式存在,每个键都与一个值相关联。

  • 快速检索:通过哈希函数计算键的哈希码,并在常量时间内检索对应的值,因此查找速度非常快。

  • 动态大小:Hashtable可以根据需要自动增长或缩小大小。

  • 常见应用场景:常见用途包括缓存数据、存储临时数据、索引数据等。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;

// 创建一个Hashtable对象
Hashtable hashtable = new Hashtable();

// 向Hashtable中添加键值对
hashtable.Add("Name", "John");
hashtable.Add("Age", 30);

// 访问Hashtable中的值
string name = (string)hashtable["Name"];
int age = (int)hashtable["Age"];

// 修改Hashtable中的值
hashtable["Age"] = 35;

// 删除Hashtable中的键值对
hashtable.Remove("Name");

// 获取Hashtable的大小
int size = hashtable.Count;

上面的代码展示了如何使用Hashtable。首先,我们创建了一个Hashtable对象,并向其中添加了一些键值对。然后,我们通过键访问了Hashtable中的值,并修改了一个值。接着,我们删除了一个键值对,并使用Count属性获取了Hashtable的大小。

通过Hashtable,开发人员可以高效地存储和检索键值对数据,实现快速的数据访问和操作。Hashtable提供了一种灵活而强大的数据结构,适用于各种场景下的数据存储和管理。

在ASP.NET WebForms中,Hashtable通常不直接用于数据绑定,因为它不像ArrayList或其他集合类型那样直接实现了IEnumerable接口。但是,我们可以将Hashtable的键值对转换为其他数据结构,然后将其绑定到控件上。以下是一个示例,演示如何将Hashtable的键值对转换为List<KeyValuePair<string, object>>并进行数据绑定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections;
using System.Collections.Generic;

public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 创建一个Hashtable对象并添加键值对
Hashtable hashtable = new Hashtable();
hashtable.Add("Name", "John");
hashtable.Add("Age", 30);
hashtable.Add("City", "New York");

// 将Hashtable的键值对转换为List<KeyValuePair<string, object>>
List<KeyValuePair<string, object>> keyValueList = new List<KeyValuePair<string, object>>();
foreach (DictionaryEntry entry in hashtable)
{
keyValueList.Add(new KeyValuePair<string, object>(entry.Key.ToString(), entry.Value));
}

// 将List<KeyValuePair<string, object>>绑定到Repeater控件
rptData.DataSource = keyValueList;
rptData.DataBind();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Hashtable Data Binding Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Hashtable Data Binding Example</h1>
<asp:Repeater ID="rptData" runat="server">
<ItemTemplate>
<div>
Key: <%# Eval("Key") %>, Value: <%# Eval("Value") %>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>

在上面的示例中,我们首先创建了一个Hashtable对象,并添加了一些键值对。然后,我们遍历Hashtable的键值对,并将其转换为List<KeyValuePair<string, object>>。最后,我们将转换后的List对象绑定到Repeater控件上,以在页面上显示键值对。


SortedList

SortedList是.NET Framework中的一种集合类型,它将键值对按键的顺序进行排序。与Hashtable不同,SortedList会根据键的自然顺序或自定义的比较器对键值对进行排序。在WebForms中,SortedList可用于以有序的方式存储和检索数据。

特点和用途:

  • 键值对存储:SortedList存储的数据以键值对的形式存在,每个键都与一个值相关联。
  • 自动排序:SortedList根据键的自然顺序或自定义的比较器对键值对进行排序。
  • 快速查找:通过键查找值的操作在SortedList中仍然是高效的。
  • 动态大小:SortedList可以根据需要自动增长或缩小大小。
  • 常见应用场景:常见用途包括需要保持数据有序的缓存、索引数据等。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections;
using System.Collections.Generic;

public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 创建一个SortedList对象并添加键值对
SortedList sortedList = new SortedList();
sortedList.Add("Name", "John");
sortedList.Add("Age", 30);
sortedList.Add("City", "New York");

// 将SortedList的键值对转换为List<KeyValuePair<string, object>>
List<KeyValuePair<string, object>> keyValueList = new List<KeyValuePair<string, object>>();
foreach (DictionaryEntry entry in sortedList)
{
keyValueList.Add(new KeyValuePair<string, object>(entry.Key.ToString(), entry.Value));
}

// 将List<KeyValuePair<string, object>>绑定到Repeater控件
rptData.DataSource = keyValueList;
rptData.DataBind();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>SortedList Data Binding Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>SortedList Data Binding Example</h1>
<asp:Repeater ID="rptData" runat="server">
<ItemTemplate>
<div>
Key: <%# Eval("Key") %>, Value: <%# Eval("Value") %>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>

详细说明:

  1. 创建SortedList
    • SortedList sortedList = new SortedList();:我们创建了一个SortedList对象。
    • sortedList.Add("Name", "John");:我们向SortedList中添加键值对。
  2. 转换为List<KeyValuePair<string, object>>
    • 我们遍历SortedList的键值对,并将其转换为List<KeyValuePair<string, object>>。这样做是为了便于绑定到数据控件上。
  3. 数据绑定
    • rptData.DataSource = keyValueList;:我们将转换后的List对象绑定到Repeater控件。
    • rptData.DataBind();:调用DataBind方法完成数据绑定。

通过上述步骤,我们成功地将SortedList中的数据按键的顺序存储并绑定到Repeater控件,在页面上以有序的方式显示键值对。SortedList的自动排序特性使其在需要有序数据存储和检索的场景中非常有用。


XML 文件

在ASP.NET WebForms中,XML文件可以用来存储和传输数据。开发人员可以使用XML文件来存储应用程序配置、用户数据等,并在WebForms应用程序中读取和处理这些数据。XML文件的灵活性和标准化使其成为数据存储和交换的常用格式。

读取和处理XML文件

ASP.NET提供了多种读取和处理XML文件的方式,包括使用XmlDocument类和DataSet类。以下是一些常用的方法:

  1. 使用XmlDocument读取XML文件XmlDocument类提供了对XML文档进行操作的方法和属性,可以用来加载、解析和修改XML文档。

  2. 使用DataSet读取XML文件DataSet类可以轻松地将XML数据读取到内存中,并将其作为表格数据处理。

示例代码:使用DataSet读取XML文件并绑定到List控件

以下示例演示如何使用DataSet读取XML文件,并将数据绑定到DropDownList控件:

示例XML文件(data.xml)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8" ?>
<Users>
<User>
<ID>1</ID>
<Name>John</Name>
</User>
<User>
<ID>2</ID>
<Name>Alice</Name>
</User>
<User>
<ID>3</ID>
<Name>Bob</Name>
</User>
</Users>
后端代码(Default.aspx.cs)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Data;
using System.Web.UI.WebControls;

public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 加载XML文件到DataSet
DataSet dataSet = new DataSet();
dataSet.ReadXml(Server.MapPath("~/data.xml"));

// 将DataSet中的数据绑定到DropDownList控件
ddlUsers.DataSource = dataSet;
ddlUsers.DataTextField = "Name";
ddlUsers.DataValueField = "ID";
ddlUsers.DataBind();
}
}
}
前端代码(Default.aspx)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>XML Data Binding Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>XML Data Binding Example</h1>
<asp:DropDownList ID="ddlUsers" runat="server">
</asp:DropDownList>
</div>
</form>
</body>
</html>

详细说明:

  1. XML文件(data.xml)
    • 这个文件包含了一些用户数据,以XML格式存储。
  2. 后端代码(Default.aspx.cs)
    • 使用DataSet类读取XML文件。dataSet.ReadXml(Server.MapPath("~/data.xml"))方法将XML文件的数据读取到DataSet中。
    • 将DataSet中的数据绑定到DropDownList控件。通过设置DataTextFieldDataValueField属性,指定要显示的文本字段和值字段。
  3. 前端代码(Default.aspx)
    • 定义一个DropDownList控件,用于显示绑定的数据。

通过上述步骤,我们成功地将XML文件中的数据读取到DataSet中,并将其绑定到WebForms页面上的DropDownList控件。这样,页面加载时,DropDownList会显示XML文件中的用户数据。


Repeater

Repeater控件是ASP.NET WebForms中用于显示重复数据的控件。它提供了极大的灵活性,允许开发人员绑定数据源,并为每个数据项生成自定义的HTML结构。Repeater控件不具有内置的样式或布局,因此开发人员可以完全控制生成的HTML。

特点和用途:

  • 数据绑定:Repeater可以绑定各种数据源,如DataSet、DataTable、IEnumerable等。
  • 自定义布局:通过定义不同的模板(如ItemTemplateAlternatingItemTemplateSeparatorTemplate等),可以完全自定义数据项的显示方式。
  • 灵活性高:适用于需要完全控制HTML输出的场景。

使用Repeater控件的详细步骤:

  1. 定义数据源:准备要绑定到Repeater的数据源,可以是DataSet或其他支持的数据源。
  2. 配置Repeater控件:在ASPX页面中定义Repeater控件,并使用不同的模板配置其显示方式。
  3. 绑定数据:在代码后端进行数据绑定。

示例代码:绑定DataSet到Repeater控件,并使用<AlternatingItemTemplate><SeparatorTemplate>

示例XML文件(data.xml)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8" ?>
<Users>
<User>
<ID>1</ID>
<Name>John</Name>
<Age>30</Age>
</User>
<User>
<ID>2</ID>
<Name>Alice</Name>
<Age>25</Age>
</User>
<User>
<ID>3</ID>
<Name>Bob</Name>
<Age>35</Age>
</User>
</Users>
后端代码(Default.aspx.cs)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Data;

public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 加载XML文件到DataSet
DataSet dataSet = new DataSet();
dataSet.ReadXml(Server.MapPath("~/data.xml"));

// 将DataSet中的数据绑定到Repeater控件
rptUsers.DataSource = dataSet.Tables[0];
rptUsers.DataBind();
}
}
}
前端代码(Default.aspx)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Repeater Data Binding Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Repeater Data Binding Example</h1>
<asp:Repeater ID="rptUsers" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("ID") %></td>
<td><%# Eval("Name") %></td>
<td><%# Eval("Age") %></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color: #f2f2f2;">
<td><%# Eval("ID") %></td>
<td><%# Eval("Name") %></td>
<td><%# Eval("Age") %></td>
</tr>
</AlternatingItemTemplate>
<SeparatorTemplate>
<tr>
<td colspan="3"><hr /></td>
</tr>
</SeparatorTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>

详细说明:

  1. XML文件(data.xml)

    • 这个文件包含了一些用户数据,以XML格式存储。
  2. 解释Repeater控件的数据绑定示例

    以下是关于如何使用ASP.NET WebForms中的Repeater控件进行数据绑定的详细解释,包括代码示例和解释。

    示例代码

    ASP.NET页面 (Default.aspx)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Repeater Data Binding Example</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <h1>Repeater Data Binding Example</h1>
    <asp:Repeater ID="rptUsers" runat="server">
    <HeaderTemplate>
    <table border="1">
    <tr>
    <th>ID</th>
    <th>Name</th>
    <th>Age</th>
    </tr>
    </HeaderTemplate>
    <ItemTemplate>
    <tr>
    <td><%# Eval("ID") %></td>
    <td><%# Eval("Name") %></td>
    <td><%# Eval("Age") %></td>
    </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
    <tr style="background-color: #f2f2f2;">
    <td><%# Eval("ID") %></td>
    <td><%# Eval("Name") %></td>
    <td><%# Eval("Age") %></td>
    </tr>
    </AlternatingItemTemplate>
    <SeparatorTemplate>
    <tr>
    <td colspan="3"><hr /></td>
    </tr>
    </SeparatorTemplate>
    <FooterTemplate>
    </table>
    </FooterTemplate>
    </asp:Repeater>
    </div>
    </form>
    </body>
    </html>

    代码后端 (Default.aspx.cs)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    using System;
    using System.Data;

    public partial class Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    // 加载XML文件到DataSet
    DataSet dataSet = new DataSet();
    dataSet.ReadXml(Server.MapPath("~/data.xml"));

    // 将DataSet中的数据绑定到Repeater控件
    rptUsers.DataSource = dataSet.Tables[0];
    rptUsers.DataBind();
    }
    }
    }

    详细解释

    前端代码解释 (Default.aspx)

    • 页面指令 (<%@ Page ... %>): 这行指令告诉ASP.NET引擎如何处理这个页面。它指定了使用的编程语言(C#)、自动事件绑定和代码隐藏文件以及继承的类。

    • DOCTYPE声明: 声明文档类型,定义了页面使用的HTML版本。

    • HTML结构:

      • <form id="form1" runat="server">: 定义了一个服务器端表单控件,用于包含所有的服务器控件。runat="server"表示这个表单将在服务器上运行。
      • <asp:Repeater ID="rptUsers" runat="server">: 定义了一个Repeater控件,IDrptUsersrunat="server"表示在服务器上运行。
    • Repeater模板:

      • HeaderTemplate: 定义Repeater控件头部的内容。这里包含一个HTML表格的开始标签和表头行。
      • ItemTemplate: 定义Repeater控件中每个数据项的显示方式。这里使用了Eval方法来绑定数据项的值。
      • AlternatingItemTemplate: 定义交替数据项的显示方式,用于为交替行设置不同的样式。这里通过设置背景颜色来区分。
      • SeparatorTemplate: 定义数据项之间的分隔符。这里使用了一个包含水平线的表格行。
      • FooterTemplate: 定义Repeater控件尾部的内容。这里包含表格的结束标签。

    后端代码解释 (Default.aspx.cs)

    • 命名空间和类定义: Default类继承自System.Web.UI.Page,表示这是一个ASP.NET WebForms页面类。

    • Page_Load事件:

      • if (!IsPostBack): 确保仅在页面首次加载时执行数据绑定逻辑,而不是在每次回发时都执行。
      • DataSet dataSet = new DataSet();: 创建一个新的DataSet对象。
      • dataSet.ReadXml(Server.MapPath("~/data.xml"));: 从指定路径读取XML文件并加载到DataSet对象中。
      • rptUsers.DataSource = dataSet.Tables[0];: 将DataSet中的第一个数据表绑定到Repeater控件。
      • rptUsers.DataBind();: 调用DataBind方法,绑定数据到Repeater控件。

    运行结果

    页面加载后,Repeater控件会根据绑定的数据源动态生成HTML内容。每个数据项都会根据定义的模板进行渲染:

    • 表格头部显示列名(ID, Name, Age)。
    • 每个数据项在ItemTemplateAlternatingItemTemplate中分别定义其显示方式。
    • 数据项之间用SeparatorTemplate定义的分隔符分隔。
    • 最后,FooterTemplate用于结束表格。

    通过这个示例,我们可以看到如何使用Repeater控件进行数据绑定并自定义每个数据项的显示方式,极大地增强了页面的灵活性和可控性。

通过上述步骤,我们成功地将DataSet中的数据绑定到Repeater控件,并使用不同的模板来控制数据项的显示样式。这种方式使得Repeater控件非常灵活,可以根据需要自定义数据项的显示方式。


DataList

DataList是ASP.NET WebForms中一个强大的控件,用于显示重复数据。它类似于Repeater控件,但提供了更多的布局和样式选项,使开发人员可以更加灵活地设计页面。

主要特点

  • 数据绑定:可以绑定到各种数据源,如数据集、数据表等。
  • 样式和布局:支持多种布局选项,可以使用样式属性自定义外观。
  • 模板支持:支持多种模板(如ItemTemplate, AlternatingItemTemplate, HeaderTemplate, FooterTemplate),可以自定义每个数据项的外观。

代码示例

以下是一个完整的代码示例,展示如何将DataSet绑定到DataList控件,并使用样式和<AlternatingItemTemplate>

前端代码 (DataListExample.aspx)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataListExample.aspx.cs" Inherits="WebApplication.DataListExample" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>DataList Data Binding Example</title>
<style>
.datalist-item { background-color: #ffffff; padding: 10px; }
.datalist-alt-item { background-color: #f2f2f2; padding: 10px; }
.datalist-header { font-weight: bold; background-color: #cccccc; padding: 10px; }
.datalist-footer { font-weight: bold; background-color: #eeeeee; padding: 10px; }
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>DataList Data Binding Example</h1>
<asp:DataList ID="dlUsers" runat="server">
<HeaderTemplate>
<div class="datalist-header">
<span>ID</span>
<span>Name</span>
<span>Age</span>
</div>
</HeaderTemplate>
<ItemTemplate>
<div class="datalist-item">
<span><%# Eval("ID") %></span>
<span><%# Eval("Name") %></span>
<span><%# Eval("Age") %></span>
</div>
</ItemTemplate>
<AlternatingItemTemplate>
<div class="datalist-alt-item">
<span><%# Eval("ID") %></span>
<span><%# Eval("Name") %></span>
<span><%# Eval("Age") %></span>
</div>
</AlternatingItemTemplate>
<FooterTemplate>
<div class="datalist-footer">
Total Items: <%# Container.DataItemCount %>
</div>
</FooterTemplate>
</asp:DataList>
</div>
</form>
</body>
</html>

后端代码 (DataListExample.aspx.cs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Data;

namespace WebApplication
{
public partial class DataListExample : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 加载XML文件到DataSet
DataSet dataSet = new DataSet();
dataSet.ReadXml(Server.MapPath("~/data.xml"));

// 将DataSet中的数据绑定到DataList控件
dlUsers.DataSource = dataSet.Tables[0];
dlUsers.DataBind();
}
}
}
}

详细解释

前端代码解释 (DataListExample.aspx)

  • 页面指令 (<%@ Page ... %>): 这行指令指定了页面的语言、自动事件绑定、代码隐藏文件及其继承的类。

  • 样式定义 (<style> ... </style>): 使用CSS定义了不同模板的样式类,例如datalist-item、datalist-alt-item等。

  • HTML结构:

    • <form id="form1" runat="server">: 定义了一个服务器端表单控件,用于包含所有的服务器控件。runat="server"表示这个表单将在服务器上运行。
    • <asp:DataList ID="dlUsers" runat="server">: 定义了一个DataList控件,IDdlUsersrunat="server"表示在服务器上运行。
  • DataList模板:

    • HeaderTemplate: 定义DataList控件头部的内容,使用了CSS类datalist-header来设置样式。
    • ItemTemplate: 定义DataList控件中每个数据项的显示方式,使用了CSS类datalist-item来设置样式,绑定数据项的值。
    • AlternatingItemTemplate: 定义交替数据项的显示方式,使用了CSS类datalist-alt-item来设置样式,用于为交替行设置不同的样式。
    • FooterTemplate: 定义DataList控件尾部的内容,使用了CSS类datalist-footer来设置样式,并显示总项数。

后端代码解释 (DataListExample.aspx.cs)

  • 命名空间和类定义: DataListExample类继承自System.Web.UI.Page,表示这是一个ASP.NET WebForms页面类。

  • Page_Load事件:

    • if (!IsPostBack): 确保仅在页面首次加载时执行数据绑定逻辑,而不是在每次回发时都执行。
    • DataSet dataSet = new DataSet();: 创建一个新的DataSet对象。
    • dataSet.ReadXml(Server.MapPath("~/data.xml"));: 从指定路径读取XML文件并加载到DataSet对象中。
    • dlUsers.DataSource = dataSet.Tables[0];: 将DataSet中的第一个数据表绑定到DataList控件。
    • dlUsers.DataBind();: 调用DataBind方法,绑定数据到DataList控件。

运行结果

页面加载后,DataList控件会根据绑定的数据源动态生成HTML内容。每个数据项会根据定义的模板进行渲染:

  • 表格头部显示列名(ID, Name, Age)。
  • 每个数据项在ItemTemplateAlternatingItemTemplate中分别定义其显示方式。
  • 数据项之间用样式类datalist-itemdatalist-alt-item区分。
  • 最后,FooterTemplate用于显示总项数。

通过这个示例,可以看到如何使用DataList控件进行数据绑定并自定义每个数据项的显示方式,极大地增强了页面的灵活性和可控性。


数据库连接

WebForms应用程序可以与数据库进行连接,从而实现对数据的持久化存储和检索。开发人员可以使### 数据库连接

在WebForms应用程序中,开发人员可以通过与数据库连接来实现数据的持久化存储和检索。ASP.NET提供了多种方法来实现数据库操作,其中ADO.NET是最常用的一种技术。

什么是 ADO.NET?

ADO.NET(ActiveX Data Objects for .NET)是.NET框架的一部分,用于数据访问的组件。它为开发人员提供了一组类,用于连接到数据库、执行命令、检索数据以及更新数据。ADO.NET主要由以下几个部分组成:

  • Connection:用于与数据库建立连接。
  • Command:用于执行数据库命令(如SQL查询、存储过程)。
  • DataReader:用于读取从数据库中检索到的数据。
  • DataSet:用于在内存中存储数据。

创建数据库连接

首先,需要创建与数据库的连接。以下是一个使用ADO.NET创建SQL Server数据库连接的示例。

示例代码

Web.config 文件

在Web.config文件中配置数据库连接字符串。

1
2
3
4
5
6
7
<configuration>
<connectionStrings>
<add name="MyConnectionString"
connectionString="Server=your_server_name;Database=your_database_name;User Id=your_username;Password=your_password;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
数据库连接和数据检索示例

以下是一个在WebForms页面中使用ADO.NET连接到数据库、执行SQL查询并将数据绑定到Repeater控件的完整示例。

Default.aspx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Database Connection Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Database Connection Example</h1>
<asp:Repeater ID="rptData" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("ID") %></td>
<td><%# Eval("Name") %></td>
<td><%# Eval("Age") %></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color: #f2f2f2;">
<td><%# Eval("ID") %></td>
<td><%# Eval("Name") %></td>
<td><%# Eval("Age") %></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
Default.aspx.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace WebApplication
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}

private void BindData()
{
string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
string query = "SELECT ID, Name, Age FROM Users"; // 假设数据库中有一个名为Users的表
SqlCommand command = new SqlCommand(query, connection);

connection.Open();
SqlDataReader reader = command.ExecuteReader();

DataTable dataTable = new DataTable();
dataTable.Load(reader);

rptData.DataSource = dataTable;
rptData.DataBind();
}
}
}
}

代码解释

Web.config 文件

  • connectionStrings:配置数据库连接字符串,包含服务器名称、数据库名称、用户名和密码。

Default.aspx

  • :定义Repeater控件,用于显示从数据库中检索到的数据。
    • HeaderTemplate:定义表头。
    • ItemTemplate:定义每个数据项的显示方式。
    • AlternatingItemTemplate:定义交替行的显示方式。
    • FooterTemplate:定义表尾。

Default.aspx.cs

  • using:引入所需的命名空间,如System.DataSystem.Data.SqlClientSystem.Configuration
  • Page_Load:在页面首次加载时调用BindData方法。
  • BindData:创建与数据库的连接并执行SQL查询,将数据绑定到Repeater控件。
    • ConfigurationManager.ConnectionStrings:从Web.config文件中读取连接字符串。
    • SqlConnection:创建数据库连接对象。
    • SqlCommand:创建SQL命令对象。
    • SqlDataReader:执行查询并读取数据。
    • DataTable:将读取的数据加载到DataTable中。
    • Repeater.DataSource:设置Repeater控件的数据源。
    • Repeater.DataBind:绑定数据到Repeater控件。

通过以上示例,可以看到如何在WebForms应用程序中使用ADO.NET连接到数据库、执行查询并将数据绑定到Repeater控件,从而实现数据的动态显示。用ADO.NET等技术来在WebForms应用程序中进行数据库操作。


母版页

母版页(Master Pages)是ASP.NET WebForms中用于创建页面布局模板的功能。它允许开发人员定义一个通用的页面布局和样式,然后在多个内容页中使用该布局。母版页可以包含头部、导航栏、页脚等公共部分,而具体的内容部分则由内容页提供。使用母版页可以实现页面布局的一致性和代码的重用。

母版页的基本结构

母版页通常包含一个或多个内容占位符(ContentPlaceHolder)控件,用于定义子页面可以插入内容的位置。内容页通过Content控件将自己的内容插入到母版页的占位符中。

创建母版页和内容页的步骤

  1. 创建母版页:定义通用的页面结构和样式。
  2. 创建内容页:指定母版页,并提供具体的内容。

母版页示例

1. 创建母版页

首先,创建一个母版页文件(Site.master),定义页面的通用布局。

Site.master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebApplication.Site" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Master Page Example</title>
<link href="Styles.css" rel="stylesheet" />
</head>
<body>
<form id="form1" runat="server">
<div>
<header>
<h1>My Website</h1>
<nav>
<ul>
<li><a href="Default.aspx">Home</a></li>
<li><a href="About.aspx">About</a></li>
<li><a href="Contact.aspx">Contact</a></li>
</ul>
</nav>
</header>
<main>
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
</main>
<footer>
<p>&copy; 2024 My Website</p>
</footer>
</div>
</form>
</body>
</html>
代码解释
  • <%@ Master %>:定义这是一个母版页。
  • <header>:定义页面的头部,包括网站标题和导航栏。
  • <asp:ContentPlaceHolder>:定义一个内容占位符,内容页将在此处插入具体内容。
  • <footer>:定义页面的页脚。

2. 创建内容页

接下来,创建一个内容页(Default.aspx),并指定使用前面创建的母版页。

Default.aspx
1
2
3
4
5
6
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<h2>Welcome to My Website</h2>
<p>This is the home page.</p>
</asp:Content>
代码解释
  • <%@ Page %>:定义这是一个ASP.NET页面,并指定使用Site.master作为母版页。
  • <asp:Content>:将内容插入到母版页的MainContent占位符中。

使用母版页的优势

  • 一致性:母版页使得整个网站的页面布局和样式保持一致。
  • 维护性:修改母版页即可更新所有使用该母版页的内容页,方便维护。
  • 代码重用:公共的布局和样式只需定义一次,不需要在每个页面中重复定义。

详细示例

Site.master.cs

可以在母版页的代码隐藏文件中添加一些共享的逻辑,例如设置主题、动态加载导航等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;

namespace WebApplication
{
public partial class Site : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 初始化代码
}
}
}
}

Default.aspx.cs

内容页的代码隐藏文件用于处理具体页面的事件和逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;

namespace WebApplication
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 页面初始化代码
}
}
}
}

总结

母版页在WebForms中提供了一种有效的方法来实现页面布局的重用和一致性。通过定义母版页和内容页,开发人员可以方便地管理和维护整个网站的布局和样式。使用母版页可以大大提高开发效率,减少重复代码,从而使项目更加易于维护。


导航

在WebForms应用程序中,导航是指用户在应用程序中浏览不同页面的过程。ASP.NET提供了多种控件和功能来实现页面导航,使用户能够方便地访问应用程序中的不同部分。常用的导航控件包括超链接、菜单、TreeView和SiteMapPath。除此之外,还可以使用Sitemap文件来定义应用程序的导航结构。

Sitemap 文件

Sitemap文件用于定义网站的结构和导航层次。它是一个XML文件,通常命名为Web.sitemap,放置在应用程序的根目录中。通过Sitemap文件,可以为导航控件提供数据源。

示例:Web.sitemap

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="Default.aspx" title="Home" description="">
<siteMapNode url="About.aspx" title="About" description="" />
<siteMapNode url="Contact.aspx" title="Contact" description="" />
<siteMapNode url="Products.aspx" title="Products" description="">
<siteMapNode url="Product1.aspx" title="Product 1" description="" />
<siteMapNode url="Product2.aspx" title="Product 2" description="" />
</siteMapNode>
</siteMapNode>
</siteMap>

动态菜单

动态菜单可以通过绑定Sitemap文件来实现。ASP.NET的Menu控件可以用来创建动态菜单,自动生成菜单项。

示例:动态菜单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Dynamic Menu Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">
<DynamicMenuStyle BackColor="LightBlue" />
</asp:Menu>
</form>
</body>
</html>

TreeView

TreeView控件用于显示分层结构的数据,例如文件系统或组织结构图。通过绑定Sitemap文件,可以实现网站的分层导航。

示例:TreeView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>TreeView Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1">
<NodeStyle Font-Names="Arial" Font-Size="10pt" />
<HoverNodeStyle BackColor="LightBlue" ForeColor="Black" />
<SelectedNodeStyle BackColor="LightCyan" Font-Bold="True" />
</asp:TreeView>
</form>
</body>
</html>

SiteMapPath

SiteMapPath控件(也称为Breadcrumbs)用于显示用户当前所在的位置,以及导航路径。它可以帮助用户了解他们在网站中的位置,并方便地返回上一级页面。

示例:SiteMapPath

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>SiteMapPath Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SiteMapPath ID="SiteMapPath1" runat="server" />
</form>
</body>
</html>

完整示例

以下是一个完整的示例,包括Sitemap文件和使用菜单、TreeView和SiteMapPath控件实现的导航。

Web.sitemap

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="Default.aspx" title="Home" description="">
<siteMapNode url="About.aspx" title="About" description="" />
<siteMapNode url="Contact.aspx" title="Contact" description="" />
<siteMapNode url="Products.aspx" title="Products" description="">
<siteMapNode url="Product1.aspx" title="Product 1" description="" />
<siteMapNode url="Product2.aspx" title="Product 2" description="" />
</siteMapNode>
</siteMapNode>
</siteMap>

Default.aspx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication.Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Navigation Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

<h1>Navigation Example</h1>

<h2>Menu</h2>
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">
<DynamicMenuStyle BackColor="LightBlue" />
</asp:Menu>

<h2>TreeView</h2>
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1">
<NodeStyle Font-Names="Arial" Font-Size="10pt" />
<HoverNodeStyle BackColor="LightBlue" ForeColor="Black" />
<SelectedNodeStyle BackColor="LightCyan" Font-Bold="True" />
</asp:TreeView>

<h2>SiteMapPath</h2>
<asp:SiteMapPath ID="SiteMapPath1" runat="server" />
</form>
</body>
</html>