验证控件
非空验证
RequiredFieldValidator
ControlToValidate="验证控件对象ID"
属性 | 说明 |
ControlToValidate | 要验证控件的ID,所有验证控件都有该属性 |
Text | 验证出错时的提示,所有验证控件都有该属性 |
ErrorMessage | 提交给汇总控件的错误信息。如果Text属性为空,则验证出错,将显示该信息,所有验证控件都有该属性 |
密码与确认密码是否一致
CompareValidator
属性 | 说明 |
ControlToValidate | 要验证的控件的ID,所有验证控件都有该属性 |
ControlToCompare | 用来与要验证的控件进行比较的控件的ID |
Type | 设置比较类型(比如字符串、整形等),不同类型的比较会出错 |
Operator | 设置比较运算符,比如等于、大于等于、小与等于、大于和小于。默认设置为等于(Equal) |
ValueToCompare | 用于比较的值 |
对控件的值进行范围验证
RangeValidator
正则表达式验证
ReqularExpressionValidator
ReqularExpression属性
- 常见的正则表达式如下:
- 非负数(正整数+0):^\d+$
- 正整数:^[0-9]*[1-9][0-9]*$
- 匹配中文字符的正则表达式:[\u4e00-\u9fa5]
- 匹配双字节字符(包括汉字在内):[^\x00-\xff]
- 货币(非负数,要求小数点后有两位数字):\d+(\.\d=d)?
- 货币(正数或负数):(-)?\d+(\.\d=d)?
自定义验证的方式
CustomValidator
可以验证用户名是否存在
属性/事件 | 说明 |
ControlToValidate | 要验证的控件ID,所有验证控件都有该属性 |
ClientValidationFunction | 设置客户端验证的脚本函数 |
ServerValidate (事件) | 服务器端验证的函数 |
验证错误消息汇总
ValidationSummary
属性 | 说明 |
ShowMessageBox | 是否显示弹出的提示消息 |
ShowSummary | 是否显示该报告内容 |
FileUpload文件上传控件
属性 | 说明 |
HasFile | 控件是否含有将要上传的文件 |
FileName | 上传文件的文件名 |
SaveAs (函数) | 将上传文件保存到服务器制定路径 |
SiteMapPath站点地图控件
配合站点地图同时使用
TreeView控件
配合XML文件使用
XML文件内容和站点地图内容一致,去掉siteMap
绑定数据源选择Xml
ASP.NET常见的对象
对象名 | 说明 |
Page对象 | Page对象是指向页面自身的方式,在整个页面的执行期内,都可以使用该对象 |
Request对象 | 此对象封装了由Web浏览器或其他客户端生成的HTTP请求的细节(参数、属性和数据),提供从浏览器读取信息或读取客户端信息等功能,用于页面请求 |
Response对象 | 此对象封装了返回到HTTP客户端的输出,用于向浏览器输出信息或发送指令 |
Session对象 | 为某个用户提供共享信息,作用于用户会话期 |
Cookie对象 | 保存在页面客户端的一种储存信息的方式 |
Application对象 | 为所有用户提供共享信息,作用于整个应用程序运行期 |
Server对象 | 它提供了服务器端的一些属性和方法,如页面文件的绝对路径等 |
Page对象
在ASP.NET中,基本内置对象包括Request对象、Response对象、Session对象、Cookie对象、Application对象和Server对象。所有页面的基类对象都是Page。
每一个aspx页面都对应一个页面类,它继承于System.Web.UI.Page类。Page对象就是此页面类的实例,即每一个页面就是一个Page对象。aspx页面在运行的过程中被编译为Page对象,并缓存于服务器内存中。
属性 | 说明 |
IsPostBack | Bool值,指示该页面是否为响应客户端回发而加载,或其是否正被首次加载或访问 |
IsValid | Bool值,指示该页面验证是否成功 |
MasterPageFile | 用于获取或设置母版页的文件名 |
页面传值
在ASP.NET中,页面传值有多种方式。
Form表单提交数据(POST)
URL参数传值(GET)
Session、Cookie或Application等内置对象来传递数据
Request对象
Request对象用于检索从浏览器向服务器所发送的请求中的信息,它提供对当前页请求的访问,包括标题、Cookie和查询字符串等。
属性/方法 | 说明 |
QueryString | 取得Get请求中的数据 |
Form | 取得Post请求中的数据 |
Request | 取得Post或Get请求中的数据 |
- 使用 QueryString属性获取页面间传值(GET)
在两个页面之间,常用URL参数传值,是常见的Get传值方式
传值:URL?参数名=值
接收:值=Request.QueryString[“参数名”]
- 使用Form属性传值(POST)
通过Form表单提交的数据(通常是POST传值),可以使用Request.Form属性来获取。
Response对象
Response对象用于将数据从服务器发送回浏览器。它允许将数据作为请求的结果发送到浏览器中,并提供有关响应的信息,可用于在页面中输入数据、在页面中跳转,还可以传递各个页面的参数。
属性/方法 | 说明 |
Cookies | 获取响应的Cookie集合 |
Redirect | 将客户端重定向到新的URL |
Write | 将信息写入HTTP响应输入流 |
- Write方法,向页面写入信息(包括js脚本)
Response.Write("ASP.NET,你好!");
Response.Write("<script>alert('删除成功!');</script>");
- Redirect方法,使当前页跳转到指定页面
Response.Redirect("Register.aspx");
Session对象
Session对象用于存储在多个页面之间传递的特定用户的信息。Session是服务端数据,其储存于服务端。针对每个浏览器的连接,系统会建立单独的会话,并自动分配一个SessionID来标识。
赋值:Session[“名称”]=值;
取值:变量=Session[“名称”];
Cookie对象
Cookie用于在客户端浏览器中存储少量信息,通常存放非敏感的用户信息,保存的时间可以根据用户的需要进行设置。并非所有的浏览器都支持Cookie,数据信息是以文本的形式保存在客户端,不占用服务端资源。
Response.Cookies[“名称”].Value=值;
String 变量名=Request.Cookies[“名称”].Value;
或
HttpCookie cookie = new HttpCookie(“名称”,值);
Response.Cookies.Add(cookie);
由于Cookie是保存在客户端的文本文件,为确保其安全性,一般不要将敏感的信息保存在Cookie中,如用户密码等。如果没有设定Cookie的过期时间,则Cookie的生命周期仅保持到关闭浏览器为止。如果将过期时间设定为MaxValue,则Cookie永不过期。Cookie的大小限制为4KB ,所以Cookie中不能存储大量数据。
Expires属性设置Cookie的过期时间
Application对象
Application对象用于共享应用程序级信息,即多个用户共享一个Application对象。一旦Application对象被创建,在整个应用程序中都可以访问该对象的值,直到应用程序结束。
赋值:Application[“名称”]=值;
取值:变量= Application[“名称”];
Server对象
Server对象提供了对服务器上的方法和属性的访问,用于访问服务器上的资源。其类名称是HttpServerUtility。
属性/方法 | 说明 |
HtmlEncode | 对字符串进行编码,使其在浏览器中正确显示 |
HtmlDecode | 与HtmlEncode相反,对已编码的内容进行解码 |
MapPath | 返回Web服务器上与指定虚拟路径相对应的物理文件路径 |
UrlEncode | 对URL地址进行编码,URL在传输含有“#”、“&”等特殊符号的参数时,需要进行编码。否则其后的内容不会被识别 |
UrlDecode | 与UrlEncode相反,对已编码的URL进行解码 |
三层架构
- 数据访问层
- 实体类
- 业务逻辑层
- 表现层
三层架构简介
分层设计可避免模块间相同功能的重复编写,达到减少模块间的耦合性,提高独立性的系统设计要求。
三层架构的设计,即数据访问层、业务逻辑层和表现层。
数据访问层:主要用于实现对数据库的访问和操作。
业务逻辑层:主要包含业务逻辑代码,以及作为表现层和数据访问层之间的通讯桥梁,负责数据的传递和处理。
表现层:用于显示数据和接收用户输入的数据,为用户提供可以交互的操作界面及表现逻辑。
在项目中使用三层架构的优势如下:
适于变化,利于维护
项目需求经常会发生变化,三层架构将功能模块分离,提高了项目的可维护性和代码的可重用性。
适用于协作开发
目前,多数项目是团队多人协作开发的,有的负责界面设计,有的负责数据库操作模块,三层架构将各个功能模块分离,各自负责各层的模块,有利于协作开发。
主流趋势
在企业级的开发中,三层架构是基本要求,大多数项目都会采用三层架构。
模型层
由于三层之间存在数据交互,所以需要中间介质——模型层,模型层包含所有与数据表相对应的实体类。三层之间通过传输实体类对象来实现通讯。
模型层的命名
常见的命名方式有Model、Models或用解决方案名+Model的格式命名。模型层是单个C#类库项目,模型层中的实体类和数据表相对应。
实体类结构
实体类对应数据表字段编写出实体类的属性即可。除了构造方法,实体类通常不含其他方法。
数据访问层(Data Access Layer,DAL)负责与数据库的交互,运行数据库查询并执行更新。
数据访问层的命名
数据访问层以DAL命名,或以解决方案名称+DAL格式命名。
数据访问类中的方法
由于数据访问类提供的是针对数据表的增、删、改和查操作,所以类的方法围绕这些操作来编写。
增(Create)
删(Delete)
改(Update)
查(Select)
业务逻辑层(Business Logic Layer,BLL)包含一系列执行于数据上的操作,数据通过实体类的形式体现,而操作则在业务流程中的每个步骤中体现。
业务逻辑层的命名
业务逻辑层通常命名为BLL,或用解决方案名称+BLL的格式命名。每个实体类通常在业务逻辑层有对应的业务逻辑类。类的格式为实体类名称+Manager。
业务逻辑层的方法
每个业务逻辑类的方法用于处理具体的业务规则。
表现层由两个主要组件组成:用户界面和表现层逻辑(UI逻辑)。
表现层的命名
通常以解决方案名称+Web格式命名,或用解决方案名称+UI格式命名。
表现层的方法
表现层的方法主要是控件的事件处理方法,以及适用于整个站点的通用方法。
数据绑定控件
ASP.NET中包含一系列的控件,专用于显示独立数据源的数据,可以通过这些控件,以可视化的方式查看绑定数据之后的效果。这些控件称为数据绑定控件。
数据绑定控件分列表型控件、表格型控件和层次型控件。
所有的数据绑定控件都从BaseDataBoundControl抽象类派生。
属性/方法 | 描述 |
DataSource | 指定数据绑定控件的数据来源,程序会从该数据源中获取数据并显示 |
DataBind() | 显示绑定的数据 |
指定数据绑定控件的DataSource(数据源)属性,并调用DataBind()方法,才能够显示绑定的数据。
控件指定的数据源必须可枚举,实现了ICollection、IEnumerable或IListSource接口的对象都可以绑定。
DropDownList控件
DropDownList控件用于显示下拉列表框,且只能选择下拉列表框中的一项。DropDownList控件在客户端被解释成<select></select>的HTML标记。
属性 | 描述 |
AutoPostBack | 用于设置当下拉列表项发生变化时,是否主动向服务器提交整个表单,默认是false,即不主动提交。如果设置为true,则可执行SelectedIndexChanged事件处理方法 |
DataTextField | 设置列表项的可见部分的文字 |
DataValueField | 设置列表项的值部分 |
Items | 获取控件的列表项的集合 |
SelectedIndex | 获取或设置DropDownList控件中的选定项的索引 |
SelectedItem | 获取列表控件中索引最小的选定项 |
SelectedValue | 获取列表控件中选定项的值,或选择列表控件中包含指定值的项 |
GridView控件
GridView控件以表格的形式显示数据源的数据,每列表示一个字段,而每行表示一条记录。
属性 | 描述 |
AllowPaging | 设置是否启用分页功能 |
Columns | 获取GridView控件中列字段的集合 |
PageCount | 获取在GridView控件中显示数据源记录所需的页数 |
PageIndex | 获取或设置当前显示页的索引 |
PageSize | 设置GridView控件每次显示的最大记录条数 |
DataList控件
DataList控件使用模板与定义样式来显示数据,并执行数据的选择、删除和编辑。DataList控件最大的特点是通过模板来定义数据的显示格式,需要通过页面语法设计出较为美观的界面,不同于GridView控件每行只能显示一条记录,DataList可以在一行显示多条记录。
<ItemTemplate>来重复显示
属性 | 描述 |
RepeatColumns | DataList中显示的列数默认是0 |
RepeatDirection | DataList的显示方式有Horizontal和Vertical两个值,分别代表水平和垂直显示 |
Repeater控件
<ItemTemplate>来重复显示
Repeater控件完全由模板驱动,可以任意设置其输出格式。Repeater控件不生成任何类似于“<Table>”的布局代码,它为显示数据库记录提供了最大限度的灵活性。在使用Repeater控件时,只能在“源”视图进行编辑,如图所示。
配置文件
ASP.NET站点开发完成后,需要部署到IIS服务器。由于开发环境下使用的数据库通常不同于生产环境下使用的数据库,所以需要修改连接字符串。
为便于修改连接字符串,通常将其保存到站点的配置文件中。
ASP.NET站点的配置文件是web.config。
在ASP.NET中有两种配置文件,分别是machine.config和Web.config。它们都是基于XML格式的文件,但各自作用域不同。
machine.config
machine.config文件是控制整个计算机所有ASP.NET应用程序的配置,又称为服务器配置文件。
它提供了整个服务器中ASP.NET程序的默认配置,影响所有本机的ASP.NET应用程序。
web.config
web.config文件是ASP.NET应用程序的站点配置文件,默认在站点的根目录。
一个站点可以有多个web.config文件存放于站点的子目录。
多个web.config构成了一个树型层次结构的配置文件系统。
machine.config文件位于最高层,控制整个计算机中所有ASP.NET站点的配置。
ASP.NET应采用就近原则处理节点冲突。
如果本层配置文件节点和上层配置文件节点相冲突,则以本层节点设置为准。如果本层没有设置,则以上层配置文件节点为准。
web.config
数据库连接字符串放到
<connectionStrings>
<add name="ConnStr" connectionString="Data Source=.;Initial Catalog=DBstudent;Integrated Security=True"/>
</connectionStrings>
在DBHelper类中引用System.Configuration
在类中使用using System.Configuration;导入空间
private string strconn = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
web.config文件的加密
使用C:\Windows\Microsoft.NET\Framework64\v4.0.30319下的aspnet_regiis.exe进行加密进入CMD命令加密
加密语法:
aspnet_regiis –pef "connectionStrings" "web项目的路径" –prov "DataProtectionConfigurationProvider"
解密语法:
aspnet_regiis –pdf "connectionStrings" "web项目路径"。
(1)加密的数据库连接字符串在站点运行时会自动解密,以供程序使用。
(2)加密和解密必须在同一台机器上完成。如果在开发的机器上加密数据库连接字符串,解密还原连接字符串也必须在此机器上完成。
身份验证和授权
身份验证
通过ASP.NET强大的安全架构,身份验证可以基于配置文件来完成。它的身份验证系统很灵活,常见的有4种验证模式。
身份验证模式 | 说明 |
Windows | 默认使用Windows集成验证 |
Forms | 为验证用户,当前请求被重定向到指定的页面,如果用户身份合法,则ASP.NET系统创建当前用户的身份凭证。通过身份凭证即可完成身份验证 |
Passport | 一种商业验证服务,基于Microsoft Passport的身份验证 |
None | 无验证,允许匿名访问,或手动编码控制用户访问 |
Forms验证
ASP.NET的站点程序,通常使用Forms验证。
Forms验证称为表单验证,主要的操作方法是在web.config文件中设置Forms节点。
Forms节点代码如下:
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" timeout="2880" defaultUrl="~/"/>
</authentication>
属性 | 说明 |
name | 用于指定身份验证产生的Cookie的名称,默认值是.ASPXAUTH |
loginUrl | 为登录,重定向到的URL,默认值是default.aspx |
timeout | 身份票据的有效时间,以分钟为单位,即Cookie的过期时间 |
path | Cookie的指定路径。默认为“/”,表示该Cookie作用于整站 |
授权
在web.config文件中设置Forms节点后,需对匿名用户或指定用户访问页面执行权限控制,称为“授权”。web.config文件的配置代码如下:
<authorization>
<deny users="?"/>
<allow roles="admin"/>
</authorization>
Authorization节点用于配置授权信息,它包括两种子节点:deny(拒绝)和allow(允许)。
deny和allow的常用属性:
属性 | 说明 |
user | 一个用逗号分隔的用户名列表,列表中的用户被授予(或拒绝)对资源的访问,其中“?”代表匿名用户;“*”代表所有用户 |
roles | 用逗号分隔的角色列表,这些角色被授予(或拒绝)对资源的访问 |
在web.config文件中,设置authentication和authorization节点,代码如下:
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" timeout="2880" defaultUrl="~/"/>
</authentication>
<authorization>
<allow users="*"/>
</authorization>
在web.config文件中,设置和system.web同级的location节点,设置ProductPay.aspx页面不允许匿名访问。代码如下:
<location path="ProductPay.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
在login.aspx页面产生“身份票据”,代码如下:
using System.Web.Security;
FormsAuthentication.RedirectFromLoginPage("userName", true);
如果要注销用户的登录,则编写如下代码即可:
FormsAuthentication.SignOut();
用户密码加密:
使用MD5方式为站点用户的密码进行加密。步骤如下:
(1)修改注册页面代码,使用MD5加密,代码如下:
user.UserPwd= FormsAuthentication.HashPasswordForStoringInConfigFile(this.txtPwd.Text, "md5");
(2)修改用户登录页面代码,使用MD5加密后比对用户密码,如果输入的
密码在加密后与数据库保存的密码相同,则允许登录并提示登录成功。
if (UserInfoManager.CheckUserLogin(this.txtUserName.Text.Trim(), FormsAuthentication.HashPasswordForStoringInConfigFile(this.txtPwd.Text.Trim(),"md5")))
{
ClientScript.RegisterStartupScript(this.GetType(), "loginSucess", "<script>alert('登录成功');</script>");
FormsAuthentication.RedirectFromLoginPage("userName", true);
}
(3)注册新用户scme,密码在数据库中已经加密,如下图:
(4)使用scme账号进行登录,登录成功。
由于MD5加密是不可逆的,所以进行登录验证时,需要将用户输入的密码进行加密,然后再比对数据库保存的密码是否相同。
站点发布和部署
自定义错误
ASP.NET允许编写自定义错误页面。在站点访问出错时,显示指定的页面。
在开发过程中,如果程序出错,ASP.NET将显示调试页面,提示异常代码的具体位置和详细的错误信息。
如果在运行环境中用户直接看到这些错误信息,将暴露站点的程序漏洞,为站点带来安全隐患。
为避免这种情况的发生,通常在发布站点前,设置web.config文件的system.web节点,代码如下:
<customErrors defaultRedirect="Error.html" mode="RemoteOnly">
<error statusCode="404" redirect="FileNotFound.html"/>
</customErrors>
customErrors 节点中:
“defaultRedirect”表示站点发生错误时,重定向到的URL地址。
“Mode”表示设定启用(On)、禁用(Off)或供远程用户(
RemoteOnly)访问的错误页面。
Error子节点用于定义HTTP访问错误,它有以下两个属性:
statusCode:HTTP错误的状态码,如404为文件未找到、500为内部服务器错误。
Redirect:当发生statusCode中指定的错误时,重定向到的页面地址。
调试和运行时:
在开发中,需要进行调试,web.config默认设置为启动调试。该节点位于system.web下,编码为:
<compilation debug="true" targetFramework="4.0">
Debug的值为true,表示启动调试;值为false,则表示禁用调试。在站点发布时,需要设置debug的值为false,以提高站点的运行速度。
HTTP运行时”也是常见的站点配置,代码如下:
<httpRuntime enable="true"
executionTimeout="90" maxRequestLength="204800"/>
解释:
“enable”表示启动该站点,如果设置为false,则站点关闭,无法访问页面。
“executionTimeout”表示页面程序执行的超时时间,以秒为单位。如果页面执行超时,将会终止执行,以避免消耗服务器资源。
“maxRequestLength”用于设置上传文件的最大大小,单位为KB,默认为4096KB(4MB),如果上传大于4MB的文件,需要将数值增大。