介绍
ASP.NET 是 Microsoft.NET 战略的重要组成部分,是由微软提供的统一 Web 开发框架。基于此框架,可以使用 ASP.NET 控件快速构建页面,减少开发人员的工作量,提高开发效率;以及用于通过 HTML、CSS、JavaScript 和服务器脚本来构建网页和网站。
ASP.NET Web 应用程序基础
网页应用程序开发体系结构分为两种:C/S 和 B/S 体系结构。
HTTP 协议
- URL:是 Uniform Rescource Locator 的缩写,表示统一资源定位符,他是专为标识网络上的资源位置而设定的一种编码地址方式。
- HTTP 协议:指超文本传输协议,是关于如何在网络上传输超文本及 HTML 文档的协议。
- 常用的请求方式:
- GET 请求
- POST 请求
- 常用的请求方式:
ASP.NET 简介与 Web Forms 的创建
ASP.NET 支持3种开发模式:
- Web Pages
- 最简单的 ASP.NET 模型
- 内置了用于数据库、视频、社交媒体等的模板和帮助器
- Web Forms
- 传统的 ASP.NET 事件驱动开发模型
- 添加了服务器控件、服务器事件以及服务器代码的网页
- MVC
- MVC 编程模型是与传统的 ASP.NET (Web Forms)相比更轻量级的替代方案
- 轻量级的可测试性的框架,同时整合了所有已有的 ASP.NET 特性,比如模板也、安全性和认证。
创建项目:
- 打开 Visual Studio,在主界面选择 新建 => 项目
- 选择模板及类型
- 点击确定按钮,进入应用程序选择窗体,选择 Web 窗体应用程序。
- 使用快捷键 Ctrl + F5 编译并执行站点程序
站点结构分析:
- .aspx:Web Forms 窗体页面的后缀
- App_Data 文件夹是 ASP.NET 提供程序存储自身数据的默认位置
- App_Start 文件夹是应用程序静态配置文件
- Content 文件夹用于存放样式文表等资源文件
- fonts 文件夹用于存放项目中需要使用到的字体文件
- Scripts 文件夹用于存放站点所用到的 JavaScript 脚本文件
页面文件结构分析:
页面文件由两部分组成:一部分是以 文件名.aspx 方式命名的页面源文件,另一部分是以 文件名.aspx.cs 方式命名的页面类文件。
//Default.aspx 代码
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherit="_Default" %>
<asp:Content runat="server" ID="FeaturedContent" ContentPiaceHolderID="FeaturedContent">......</asp.Content>
<asp:Content runat="server" ID="BodyContent" ContentPiaceHolderID="MainContent">......</asp.Content>
- <%@ @>:是 ASP.NET 页面指令
- @Page:表示当前页面
- Language:表示当前页面所使用的语言
- AutoEventWireup:是指是否启用页面自动事件回传
- CodeFile:表示页面所对应的类文件
验证控件
在 ASP.NET 中,提供验证控件便于使用的机制来执行各种验证任务,如果用户输入没有通过验证,则验证控件将禁止页面对服务器进行下一步的访问,并向用户显示相关的错误提示消息。
数据验证控件
数据验证有三种方式:
- 后端代码验证
- JavaScript 验证
- 服务器验证控件
常用的验证控件:
ASP.NET 提供了 5 种验证控件和 1 种摘要控件:
- CompareValidator
- Customvalidator
- RangeValidator
- RegularExpressionvalidator
- RequiredFieldValidator
- ValidationSummary
非空和比较验证控件
RequiredFieldValidator 控件要求用户在页面上输入必填的内容,常用于文本框“不能为空”的验证。
| 属性 | 说明 |
| ControlToValidate | 要验证的控件的 ID(所有验证控件都有该属性) |
| Text | 验证出错时的提示(所有验证控件都有该属性) |
| ErrorMessage | 提交给汇总控件的错误信息(所有验证控件都有该属性)。如果 Text 属性为空,则验证出错,将显示该消息。 |
<form id="form1" runat="server">
<div>用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUserName" ErrorMessage="请输入用户名" ForeColor="red"></asp:RequiredFieldValidator>
</div>
<asp:Buttion ID="btn" Text="登录" runat="server"></asp:Button>
</form>
this.lblMessage.Text = "登录数据提示";
CompareValidator 控件用于执行数据类型检查,或比较一个值与另外一个值,以确定这两个值是否与比较运算符指定的关系相匹配。
| 属性 | 说明 |
| ControlToValidate | 要验证的控件的 ID(所有验证控件都有该属性) |
| ControlToCompare | 用于参与验证的控件进行比较的控件的 ID |
| Type | 设置比较类型(如字符串、整型等),不同类型的比较会出错 |
| Operator | 设置比较运算符,如等于(Equal)、大于等于(GreaterThanEgual)、小于等于(LessThanEqual)、大于(GreaterThan)和小于(LessThan) |
| ValueToCompare | 用于比较的值 |
另外, CompareValidator 可用于执行类型检查,如用户生日必须符合日期类型,使用 CompareValidator 控件执行检察的方法,移除 ValueToCompare 和 ControlToCompare 的值,并设置 Type 类型为 Date,设置 Operator 的值为 DataTypeCheck。
<form id="form1" runat="server">
<div>用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUserName" ErrorMessage="请输入用户名" ForeColor="red"></asp:RequiredFieldValidator>
</div>
<div>密码:<asp:TextBox ID="txtPasswd" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtPasswd" ErrorMessage="请输入密码" ForeColor="red"></asp:RequiredFieldValidator>
</div>
<div>确认密码:<asp:TextBox ID="txtRePasswd" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtRePasswd" ErrorMessage="请再次输入密码" ForeColor="red"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="txtPasswd" ControlToValidate="txtRePasswd" ErrorMessage="两次密码不一致!" ForeColor="red"></asp:CompareValidator>
</div>
<asp:Buttion ID="btn" Text="注册" runat="server"></asp:Button>
</form>
范围和正则表达式验证控件
RangeValidator 控件用于检查输入的值是否在确定的最小值和最大值之间。
| 属性 | 说明 |
| ControlToValidate | 要验证的控件的 ID(所有验证控件都有该属性) |
| MaximumValue | 最大值 |
| MinimumValue | 最小值 |
| Type | 验证类型(字符串、整型、双精度、日期和货币 5 种) |
ReqularExpressionValidator 控件用于检查用户的输入是否与预定义的正则表达式相匹配。
| 正则表达式 | 说明 |
| ^\d+$ | 非负数(正整数 +0) |
| ^[0-9]*[1-9]*$ | 正整数 |
| [\u4e00-\u9fa5] | 匹配中文字符的正则表达式 |
| [^\x00-\xff] | 匹配双字节字符(包括汉字在内) |
| \d+(\.\d=d)? | 货币(非负数,要求小数点后有两位数字) |
| (-)?\d+(\.\d=d)? | 货币(正数或负数) |
自定义验证控件
CustomValidator 控件用于执行自定义验证。
| 属性 | 说明 |
| ControlToValidate | 要验证的控件的 ID(所有验证控件都有该属性) |
| ClientValidationFunction | 设置客户端验证的脚本函数 |
| ServerValidate(事件) | 服务端验证的方法 |
ValidationSummary 控件用于在页面上希纳是所有验证错误的摘要,他收集本页种所有验证控件的错误信息(ErrorMessage 属性),进行组织并统一显示。ValidatorSummary 控件只能以简单列表、段落或弹出框的形式显示错误信息。
| 属性 | 说明 |
| ShowMessageBox | 是否显示弹出的提示消息 |
| ShowSummary | 是否显示该报告内容 |
提示:可以设置验证控件的 Type 属性为 * ,在验证提示时,验证控件的提示位置仅显示一个红色的 *,另一种方式是在验证控件的标签种写入 *,代码如下:
<asp:RequireFieldValidator ID="rfvUserName" runat="server" ErrorMessage="请输入用户名" ControlToValidate="txtLoginID">*</asp:RequiredFieldValidator>
高级控件
在 ASP.NET 中,在存在着其他复杂的数据输入,这时我们就还需要学习其他高级的控件。
母版页和内容页
母版页是以 .master 为后缀名的文件,它可以实现页面相统一布局,并将页面上的公用元素(如网站 Logo、广告条和导航条等)整合到一起。
内容页(Default.aspx)对应的是母版页(Site.master)。
母版页的特点:
- 有利于站点维护和修改,降低开发人员的工作强度。
- 具备高效的内容整合能力。
- 有利于实现页面布局
- 提供便于使用的对象模型
母版页的使用:资源管理器 => 右键 添加 => 添加新项 => Web 窗体母版页。
- 模板页与普通页的区别:
- 声明:
- 普通页的声明:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="..." AutoEventWireup="true" CodeFile="..." Inherit="..." %> - 母版页的声明:
<%@ Master Language="C#" MasterPageFile="..." AutoEventWireup="true" CodeFile="..." Inherit="..." %>
- 普通页的声明:
- 扩展名:
- 普通页的扩展名是 .aspx
- 母版页的扩展名是 .master
- ControlPlaceHolder 控件
- 母版页可以使用一个或多个 ControlPlaceHolder 控件,普通页不使用该控件
- 声明:
内容页的使用:资源管理器 => 右键 添加 => 添加新项 => 包含母版页的 Web 窗体。
FileUpload 文件上传控件
FileUpload 控件的主要功能是向指定的目录上传文件,该控件包括一个文本框和一个浏览按钮。用户可以在文本框中输入完整的文件路径,或通过按钮浏览并选择需要上传的文件。FileUpload 控件不会自动上传文件,而必须设置相关的事件处理程序,然后再程序中实现文件上传。
| 属性 | 说明 |
| HasFile | 控件是否含有将要上传的文件 |
| FileName | 上传文件的文件名 |
| SaveAs(函数) | 将上传文件保存到服务器指定的路径 |
<form id="form1" runat="server">
<div>
<asp:Image ID="imagePic" runat="server" /><br>
<asp:FileUpload ID="fileUpload" runat="server" />
<asp:Button ID="btn" runat="server" Text="上传" Obclick="btnUpload" /><br />
<asp:Label ID="message" runat="server" Text=""></asp:Label>
</div>
</form>
protected void btnUpload(object sender, EventArgs e)
{
if(fileUpload.HasFile)
{
string fileName = fileUpload.FileName;//获取上传的文件名
string fileFix = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower());//获取上传文件的文件后缀名
if(fileFix != 'png' && fileFix != 'jpg' && flieFix = 'jpeg' && fileFix = "pic")
{
this.message.Text = "上传的文件不是图片类型!";
}
else
{
fileUpload.SaveAs(server.MapPath("~/UploadPic") + fileName);
this.imagePic.ImageUrl = "~/UploadPic" + fileName;
this.message.Text = "上传成功!"
}
}
}
注意:Server.MapPath("~/") 获取的是服务器站点的根目录
项目路径:~
文件下载
与文件上传相对应的是文件下载,各种软件下载网站及视频站点会频繁使用文件下载功能。文件下载有两种本法:
- 使用 HTML 超链接,再点击链接后下载文件
- 使用 ASP.NET 中的 Response 对象以及文件流来处理下载
<form id="form1" runat="server">
<div>
<asp:Button ID="btn" runat="server" Text="下载" Obclick="btnDown" /><br />
</div>
</form>
protected void btnDown(object sender, EventArgs e)
{
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition","attachment;filename=logo.zip");
string fileName = Server.MapPath("logo.zip");
Response.TransmitFile(fileName);
}
TreeView 控件
各种站点都有导航系统,最基本的实现方法就是在页面上放置多个超链接以达到页面导航的功能。此方法的缺点是超链接分散在多个页面,在站点结构发生变化的情况下,分散导航会导致超链接地址的维护变得非常的繁琐。
站点地图:
在 ASP.NET 中,站点地图是以 web.sitemap 命名的文件,且需要存储与站点的根目录下。web.sitemap 文件内容以 XML 所描述的树状结构文件,其中包含了站点的结构信息。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">//根节点
<siteMapNode url="Default.aspx" title="新鲜生活" description="">//一级节点
<siteMapNode url="login.aspx" title="登录" description="" />//二级节点
<siteMapNode url="regist.aspx" title="注册" description="" />//二级节点
</siteMapNode>
</siteMap>
//<siteMapNode url="文件路径" title="页面描述" description="说明文本">
siteMapNode 对应着页面的节点,一个节点只能描述一个页面TreeView 控件的使用
TreeView 控件由一个或多个节点组成,TreeView 控件中的每个顶被称为一个节点,由 TreeNode 对象表示。
TreeView 控件主要支持以下功能:
- 采用站点地图作为 TreeView 控件的数据源
- 使用 XML 文件作为 TreeView 控件的数据源
补充:TreeView 控件名.SelectNode.Text 用于获取用户所点的节点
系统对象
多数的商业站点页面数据量较大,页面之间的链接复杂,传值调用频繁。例如:网上商城的用户经常通过“商品搜索”功能查询商品,然后点击商品链接,浏览商品页面呈现出的商品信息的详细内容。
Page 对象
在 ASP.NET 中,基本内置对象包括 Page 对象、Request 对象、Response 对象、Session 对象、Cookie 对象、Application 对象和 Server 对象 ,所有页面的基类对象是 Page。
| 对象名 | 说明 |
| Page 对象 | Page 对象是 |
| Request 对象 | 此对象封装了 |
| Response 对象 | 此对象 |
| Session 对象 | 为 |
| Cookie 对象 | |
| Application 对象 | |
| Server 对象 | 它提供了 |
Page 对象继承于 System.Web.UI.Page 类。Page 对象就是此页面类的实例,即每一个页面就是一个 Page 对象。aspx 页面在运行的过程中编译为 Page 对象。
| 属性 | 说明 |
| Bool 值,指该页面是否为响应客户端回发而加载,或其是否正被首次加载或访问。 | |
| IsValid | Bool 值,指该页面验证是否成功 |
| MasterPageFile | 用于获取或设置母版页的文件名 |
Response 对象
Response 对象用于将数据从服务器发送回浏览器,它允许将数据作为请求的结果发送到浏览器中,并提供有关相应的信息,可用于在页面中输入数据和在页面中跳转。
| 属性 / 方法 | 说明 |
| Cookies | 获取响应的 Cookie 集合 |
| Write() | 将信息写入 HTTP 响应输入流 |
| Redirect(string Url) | 将客户端重定向到新的 Url |
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack)
{
Response.Write("Hello World!");
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack)
{
Response.Redirect("Register.aspx");
}
}
Request 对象
Request 对象用于检索从浏览器向服务器所发送的请求中的信息,他提供对当前页面请求的访问,包括标题、Cookie 和查询字符串等。
| 属性 / 方法 | 说明 |
| QueryString[“参数名”] | 取得 GET 请求中的数据 |
| Form | 取得 POST 请求中的数据 |
| Request | 取得 POST 或 GET 请求中的数据 |
- 使用 QueryString 属性获取页面间传值。在两个页面之间,URL 参数传值是常见的 GET 传值方式,我们通过 URL 查询字符串 ?= 的格式进行传值。
URL?参数名=值 - 使用 Form 属性传值。通过 Form 表单提交的数据(通常是 POST 传值),可以使用
Request.Form属性来获取。
<% %> 表示页面上的服务端代码可以和 HTML、JS 等客户端代码并存于页面源码中,<%= %> 用于输出服务端的非私有变量。Server 对象
Server 对象提供了对服务器上的方法和属性的访问,用于访问服务器上的资源,其类名是 HttpServerUtility。
| 属性 / 方法 | 说明 |
| HtmlEncode | 对字符串进行编码,使其在浏览器中正确显示 |
| HtmlDecode | 与 HtmlDecode 相反,对已编码的内容进行解码 |
| MapPath | 返回 Web 服务器,指定与虚拟路径相对应的物理文件路径 |
| UrlEncode | 对 URL 地址进行编码,URL 在传输含有 #、& 等特殊符号的参数时需要进行编码,否则其后的内容不会被识别 |
| UrlDecode | 与 UrlEncode 相反,对已编码的 URL 进行解码 |
- MapPath 用法:
//语法:
//path 参数微网站的虚拟路径,如果为 null ,则返回站点应用程序所在目录的物理路径
Server.MapPath(string path);
例如:
<form id="form1" runat="server">
Server.HtmlEncode:<% Response.Write(Server.HtmlEncode("<br>")); %><br />
Server.UrlEncode:<% Response.Write(Server.UrlEncode("default.aspx?name=王")); %><br />
</form>
页面状态管理
在 ASP.NET 中,页面状态管理提供便于使用的机制来存储用户操作的信息。
Cookie 对象
在 ASP.NET 中,Cookie 用于在客户端浏览器中存储少量信息,通常存放非敏感的用户信息,保存时间可以根据用户的需要进行设置。
语法:
//设置 Cookie
Response.Cookies["名称"].Value = 值;
//获取 Cookie
string 变量名 = Request.Cookies["名称"].Value;
Cookie 所对应的类是 HttpCookie,所以另外一种添加 Cookie 值的语法是:
HttpCookie cookie = new HttpCookie("名称","值");
Response.Cookies.Add(cookie);
由于 Cookie 是保存在客户端的文本文件,为确保其安全性,一般不要将敏感信息保存在 Cookie 中,如用户密码等
| 属性 | 说明 |
| Name | Cookie 的变量名称 |
| Value | 取得或设置 Cookie 变量的值 |
| Expires | 用于设定 Cookie 的过期时间 |
存储方式:存储在一小段(小于 4kb)文本到客户端浏览器
生命周期:默认关闭浏览器即销毁,可自行设置过期时间
作用:保存临时数据到浏览器,如记住密码
Session 对象
Session 对象用于存储在多个页面之间传递的特定用户信息。Session 是一个集合,可以使用索引来访问,语法如下:
//设置 Session
Session["名称"] = 值;
//获取 Session
string 变量名 = Session["名称"];
| 方法 | 说明 |
| Abandon() | 取消当前会话 |
| Clear() | 从会话对象中移除所有的键和值 |
| Remove() | 删除会话对象中的项 |
存储方式:存储数据到服务端
生命周期:会话超时,或终止,默认关闭浏览器过一会自动销毁
作用:实现多客户端多页面数据共享
Session 对象的特点:
- Session 对象包含某一个用户的状态信息,此信息仅面向该链接,不与其他用户共享。
- 会话超时或过期,服务器会即刻清除 Session 对象,释放所有资源。
- 会话通过 SessionID 传递状态信息,客户端仅知道 SessionID ,但对其状态信息不可见。
Application 对象
Application 对象用于共享应用程序级信息,即多个用户共享一个 Application 对象。Application 对象的用法和 Session 对象的用法相同,语法如下:
//设置 Application
Application["名称"] = 值;
//获取 Application
string 变量名 = Application["名称"];
存储方式:存储数据到服务端
生命周期:服务端下线即销毁
作用:实现多客户端多页面数据共享
List<string> app = Application["news"] as List<string>;
if(app == null)
{
app = new List<string>();
app.Add("信息1");
app.Add("信息2");
app.Add("信息3");
app.Add("信息4");
}
三层架构
任何复杂的软件都可以通过分层来组织,每一层表示系统的一个逻辑部分。
在中大型 ASP.NET 站点的设计开发中,通常采用三层架构的设计,即数据访问层、业务逻辑层和表现层。
![图片[1]-[学习笔记 Day04]ASP.NET WEB 设计基础:让自己的程序飞向世界的每一个角落-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/04/20260405152400116-image.png)
数据绑定控件
在 ASP.NET 中,提供了专用的数据绑定语法和大量的数据绑定控件,允许在表现层格式化呈现来自数据访问层的数据。
数据绑定是 ASP.NET 提供的另一种访问数据库的方法,与 ADO.NET 数据库访问技术不同的是,数据绑定技术可以让程序员不关注数据库的连接、数据库命令以及如何格式化这些数据以显示页面上的环节,而是直接把数据绑定到 HTML 元素和 Web 控件中。
数据绑定控件分为列表型控件、表格型控件和层次型控件。在 ASP.NET 中,所有的数据绑定控件都从 BaseDataBoundControl 抽象类派生出来的。
| 属性 / 方法 | 描述 |
| DataSource | 指定数据绑定控件的数据来源,程序会从该数据源中获取数据并显示 |
| DataBind() | 显示绑定的数据 |
| 数据绑定控件 | 描述 |
| DropDownList | 下拉数据绑定控件 |
| Repeater | Repeater 控件是一个数据绑定容器控件,用于生成各个子项的列表,这些子项显示方式可以完全由编程自己编写,不支持分页、排序和编辑,仅提供重复模板内容 |
| GridView | 以表格的形式进行数据展示,有自带分页,支删、改、排序、分页、外观设置以及自定义显示数据 |
| DetailsView | DetailsView 控件以表格形式显示数据,且一次仅显示数据源的单条记录,并且 <table> 标签下的每行(<tr> 标签)表示记录中的每一个字段。这个控件同样支持数据的编辑、插入和删除操作,并可以轻松的设置分页功能 |
| DataList | DataList 控件,类似于 Repeater 控件,用于显示限制于该控件的项目的重复列表。不过,DataList 控件会默认的在数据项目上添加表格,且具有内置样式设置 |
| ListView | 按照编程者编写的模板格式显示数据,与 DataList 和 Repeater 控件相似,提供了增、删、改、排序和分页等功能,还可以支持用户自定义模板。 |
| FormView | FormView 控件与 DetailsView 控件很相似,FormView 控件仅可现实数据源中的单条记录 |
| 控件 | 执行效率 | 用途 |
| DataList | 一般 | 二维表 + 图 |
| Repeater | 快 | 图 |
| GridView | 慢 | 二维表 |
数据绑定的类型:
- 单值绑定:可以通过单值绑定的方式把数据添加到 ASP.NET 页面的任何地方,其实就是实现动态文本的一种方式
- 数据绑定表达式:
<%=XXX %>:内联引用方式,可以引用 C# 代码<%# XXX %>:可以引用 .cs 文件中的代码的字段,但这个字段必须初始化后,在页面的 Load 事件中使用 Page.DataBind() 方法来实现<%$ XXX %>:可以引用 Web.config 文件中预定义的字段或已注册的类<%# Eval(XXX) %>:类似于 JavaScript ,数据源也需要绑定
- 缺点:
- 数据绑定的代码和定义用户界面的代码混合在一起,这样不方便页面和代码的管理,容易引起混乱。
- 代码过于分散,使得不同的程序员很难在同一各项目上协同工作。
- 例如:
- 数据绑定表达式:
<div>
<div>
<%# projectName %><br /><br .><%# DataTime.Now %>
</div>
<asp:TextBox ID="bindTest" runat="server" Text="<%$ AppSettings:test %>">
</div>
- 多值绑定:
- 单值数据绑定和多值数据绑定的工作方式不太一样,使用多值绑定时,必须设置一个数据控件的单个或多个属性。
<%# 数据绑定表达式 %> 的最外层用双引号或者单引号都可以。反之,如果数据表达式中出现双引号,则 <%# 数据绑定表达式 %> 的最外层最好用单引号。指定数据绑定控件的 DataSource (数据源)属性,并调用 DataBind() 方法才能够显示绑定的数据。
控件执行的数据源必须可枚举,实现了 ICollection、IEnumerable 或 IListSource 接口的对象都可以绑定。
DropDownList 控件
DropDownList 控件用于显示下拉列表框,且只能选择下拉列表框中的一项。其被解释成 <select></select> 的 HTML 标记。
| 属性 | 描述 |
| AutoPostBack | 用于设置当下拉列表发生变化时,是否主动向服务器提交整个表单(默认 False,即不主动提交,True:可执行 SelectedIndexChanged 事件处理方法) |
| DataTextField | 设置列表项的可见部分的文字 |
| DataValueField | 设置列表项的值部分 |
| Items | 获取控件的列表项的集合 |
| SelectedIndex | 获取或设置 DropDownList 控件中的选定项的索引 |
| SelectedItem | 获取列表控件中索引最小的选定项 |
| SelectedValue | 获取列表控件中选定项的值,或选择列表控件中包含指定值的项 |
补充:
DropDownList 控件名.Items.Insert(索引位置 , 项) => 将指定项添加到指定位置
string.Format(“[0:C]” , 变量名) => 将指定值转化为货币格式
DataList 控件
DataList 控件使用模板与定义样式来显示数据,并执行数据的选择、删除和编辑,其最大的特点是通过模板来定义数据的显示格式,需要通过页面语法设计出较为美观的界面。
从控件的使用角度而言,多行多列数据(即表格类型的数据)的展示,通常回选择 GridView 控件;单行多列或多行单列数据的展示,则使用 DataList 控件或 Reoeater 控件。
DataList 支持多种模板,必须使用的模板是 ItemTemplate。
| 属性 / 方法 | 描述 |
| RepeatColumns | DataList 中显示的列数默认为 0 |
| RepeatDirection | DataList 的显示方式有 Horizontal(水平) 和 Vertical(垂直) 两个值 |
在 DataList 中
<asp:LinkButton ... CommandADgument='<%#Eval("字段名") %>' ...>...</asp:LinkButton> 中的 CommandADgument 可以将 ID 绑定到其控件JQuery 中,
$(...).hover(鼠标移上去的时候 , 鼠标移开的时候)CSS Classs 属性:将 asp 控制添加 class 类名:
OnClientClick="return js方法名()" => 客户端调用Repeater 控件
其完全由模板驱动,可以任意设置其输出格式,他不生成任何类似于 <table> 标签的局部代码,他为显示数据库记录提供了最大限度的灵活性。
GridView 控件
GridView 控件比表格的形式显示数据源的数据,每列表示一个字段,而每行表示一条记录。其最大的特点是自动化程度高,可以再不编写代码的情况下实现分页和排序等功能。
| 属性 | 描述 |
| AllowPaging | 设置是否启用分页功能 |
| Columns | 获取 GridView 控件中列字段的集合 |
| PageCount | 获取在 GridView 控件中显示数据源记录所需的页数 |
| PageIndex | 获取或设置当前显示页的索引 |
| PageSize | 设置 GridView 控件每次显示的最大记录条数 |
补充:选择 GridView 控件中的一行,取得第一个单元格的数据,可以使用的写法如下:
this.GridView控件名.Rows[e.RowIndex].Cells[0].Text
分页操作
GridView 控件以表格的形式显示数据源的数据,当数据较多时,无法在一个页面显示所有数据,这时候就需要对数据进行分页操作。
| 属性 | 描述 |
| AllowPaging | 设置是否启用分页功能 |
| PageCount | 获取在 GridView 控件中显示数据源记录所需的页数 |
| PageIndex | 获取或设置当前显示页的索引 |
| PageSize | 设置 GridView 控件每次显示的最大记录条数 |
| 属性 | 描述 |
| PageIndexChanging | 页码索引改变触发事件 |
Web Pages 的初探
ASP.NET 支持三种开放模式,分别是 Web Pages、MVC 以及 Web Forms。传统的 ASP.NET Web Forms 开发技术将 WinForm 的开发方式移植到了 Web 开发。
Web Pages 的优点:
- 易于学习、阅读和使用
- 围绕单一网页进行构建
- 类似 PHP 和 ASP
- 服务器脚本使用 Visual Basic 或 C#
- 对 HTML、CSS 和 JavaScript 的完全控制
Razor 基本语法和使用
Razor 不是一种代码语言,而是视图中使用的代码引擎。
特点:
- Razor 是一种向网页添加基于服务器的代码的标记语法
- Razor 拥有传统 ASP.NET 标记的能力,但是更易学习和使用
- Razor 是一种类似 ASP 和 PHP 的服务端标记语法
- Razor 支持 C# 和 Visual Basic 编程语言
基本语法:
在 Razor 语法中,行内表达式(变量和函数)以 @ 开始,可以用 @ 标记来输出变量或者定义代码块(@{……})。
- Razor 代码块由 @{…} 包围
- 行内表达式(变量和函数)以 @ 开始
- 代码语句以分号结束
- 变量通过 var 关键字继续声明
- 字符串引用包围
<body>
<!-- 单行语句 -->
@{ var msg = "hello"; }
<p>The vlaue is @msg</p>
<!-- 多行语句 -->
@{
var name = 'jack';
var age = 28;
var isflag = true;
}
<!-- if 语句 -->
@if (isflag)
{
@:好
} else
{
@:不好
}
</body>
<body>
@var arr = [1,2,3,4,5,6];
<!-- for 语句 -->
@for(int i = 0; i< arr.length; i++)
{
@arr[i];
}
</body>
Web Pages 的进阶
在实际的开发中,所有信息数据都是从数据库中读取,并且需要操作数据复杂的分页和绑定显示,所以需要一种简单的绑定表格的方式 WebGrid。
WebGrid 数据绑定
WebGrid 帮助器就提供了一种简单的数据显示方式,支持以下功能:
- 自动建立显示数据的 HTML 表格
- 支持不同的格式化选项
- 支持数据分页
- 支持点击列标题进行排序
| 属性 | 类型 | 说明 |
| source | IEnumerable<dynamic> | 要呈现的数据 |
| columnNames | IEnumerable<string> | 筛选呈现的列 |
| defaultSort | string | 指定作为排序依据的默认列 |
| rowsPerPage | int | 控制每页显示的行数(默认值为 10) |
| canPage | bool | 启用或禁用数据分页 |
| canSort | bool | 启用或禁用数据排序 |
| pageFieldName | string | 页码的查询字符串字段名称 |
| selectionFieldName | string | 所选行号的查询字符串字段名称 |
| sortFieldName | string | 排序列的查询字符串字段名称 |
| sortdirectionfieldName | string | 排序方向的查询字符串字段名称 |
//创建 WebGrid 对象并赋值数据源
var wg = new WebGrid(传递数据源)
//把数据源比表格的形式输出
wg.GetHtml();
WebGrid 分页操作
在数据量较多的时候,如果同步显示出所有数据,对于网页的负担会很大,显示速度也会大大降低,这时候我们需要使用分页来进行操作。
| 属性 | 类型 | 描述 |
| rowsPerPage | int | 控制每页显示行数(默认值为10) |
| canPage | bool | 启用或禁用数据分页 |
| pageFieldName | string | 页码的查询字符串的字段名称 |
Chart 数据绑定
Chart 帮助器可以创建不同类型的带多种格式化选项和标签的图表图像。
| 属性 | 类型 | 描述 |
| FileName | string | 获取或设置图表名称 |
| Height | int | 获取或设置图表高度 |
| Width | int | 获取或设置图表宽度 |
var chart = new Chart(width:600 ,height:400);
| 方法 | 参数 | 类型 | 描述 |
| AddTitle() | text | string | 设置图表的标题 |
| AddSeries() | name | string | 唯一标注名称 |
| AddSeries() | chartType | string | 图表显示的类型 |
| AddSeries() | xValue | IEnumerable | 定义 X 轴的值 |
| AddSeries() | yValue | IEnumerable | 定义 Y 轴的值 |
| DataBindTable() | dataSource | IEnumerable | 设置绑定数据源 |
| DataBindTable() | xField | string | 设置 X 轴数据显示列 |
| Write() | Format | string | 设置输出图片格式 |
| Save() | Path | string | 图片保存路径 |
| Save() | Format | string | 图片保存格式 |
![[学习笔记 Day04]ASP.NET WEB 设计基础:让自己的程序飞向世界的每一个角落-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/08/20250827185617438.jpeg)

![[学习笔记 Day01]C++基础:简单的程序设计,始于梦想的开始!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250922171813209.webp)
![[学习笔记 Day02]Vue基础:前端造梦,继续干!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250919193418264.jpeg)
![[学习笔记 Day06]Python 数据分析与应用:数据分析库 Pandas 的使用-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250923154612655.png)


![[McMaster.NET 的使用] 打造自己的插件系统!-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/04/20260408212507422-科技感ENVI安装教程封面-1-scaled.png)
![[学习笔记 Day01]Git 版本控制系统:Git 命令的学习!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2026/02/20260206152542723.png)
![[Dotnet-ef 工具] ORM 工具生成实体模型步骤及常见问题!-资源刺客](https://images.kodo.cdn.itdka.cn/wp-contents/uploads/2026/03/20260326200207417-818064be8e4c5751f8ce12720bbecbfb.jpeg)
![[自动化 + 手残党专属]宝塔安装AllinSSL证书管理教程-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/11/20251112122722716.png)




![[GitHub]Clawdbot-feishu:OpenClaw 的飞书集成插件-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2026/02/20260214135015363.png)

暂无评论内容