84
1 9 ASP.NET 基基

9 ASP.NET 基础

  • Upload
    clover

  • View
    72

  • Download
    5

Embed Size (px)

DESCRIPTION

9 ASP.NET 基础. 主要内容. 9.1 ASP.NET 简介 9.2 WEB 窗体 9.3 几个主要对象 9.4 ASP.Net 的数据绑定控件 DataList 控件 DataView 控件 GridView 控件. ASP.NET 简介. ASP.NET 是创建动态 Web 页的一种强大的服务器端新技术 它可 为World Wide Web站点或为企业内部互联网创建动态的可进行交互的HTML页面 采用面向对象的方法来构建动态 Web 应用程序 ASP.NET 可以用来建设门户网站,实现复杂的基于WEB的系统,电子邮件发送系统等 - PowerPoint PPT Presentation

Citation preview

Page 1: 9 ASP.NET 基础

1

9 ASP.NET 基础

Page 2: 9 ASP.NET 基础

2/84

主要内容 9.1 ASP.NET 简介 9.2 WEB 窗体 9.3 几个主要对象 9.4 ASP.Net 的数据绑定控件

DataList 控件 DataView 控件 GridView 控件

Page 3: 9 ASP.NET 基础

3/84

ASP.NET 简介 ASP.NET 是创建动态 Web 页的一种强大的服务器端新技术 它可为 World Wide Web 站点或为企业内部互联网创建动态的可进行交互的 HTML 页面采用面向对象的方法来构建动态 Web 应用程序ASP.NET 可以用来建设门户网站,实现复杂的基于 WEB 的系统,电子邮件发送系统等 可在 Internet 或 Intranet 上部署 ASP.NET

Web 应用程序

Page 4: 9 ASP.NET 基础

4/84

ASP.NET 的优点与浏览器无关将业务逻辑代码与显示逻辑分开新的集成开发环境简单性和易学性用户帐户和角色多处理器环境的可靠性可扩展性高效的可管理性执行效率的大幅提高易于配置和部署

Page 5: 9 ASP.NET 基础

5/84

ASP.NET 的功能 7-1 支持多种编程语言

ASP.NET

VB.NET C# JScript 其他语言

Web 应用程序

支 持

Page 6: 9 ASP.NET 基础

6/84

ASP.NET 的功能 7-2代码编译执行

___________________________

代码编译

Microsoft中间语言( MSIL 或 IL )

JIT 编译器 机器语言 分别编译 IL 的每一部分

Page 7: 9 ASP.NET 基础

7/84

ASP.NET 的功能 7-3 缓存机制

缓存整个页面

页面级的缓存 – 缓存整个页面

缓存片段缓存 – 缓存页面的一部分

页面一部分

Page 8: 9 ASP.NET 基础

8/84

ASP.NET 技术利用面向对象的语言如 C #进行后台开发,它包括一系列很有用的类和命名空间 ASP.NET 的功能 7-4

命名空间类 - HtmlAnchor

类 - HtmlControl

类 - HtmlForm

在逻辑上将具有相似功能的类进行分组

相似的功能

Page 9: 9 ASP.NET 基础

9/84

ASP.NET 的功能 7-5 ASP.NET 服务器控件是在服务器上运行并封装用户界面及其他相关功能的组件,这些控件提供了各种属性、方法和事件,可简化构建强大的 Web 应用程序的过程

HTML 控件属于 System.Web.UI.HtmlControls 命名空间并派生自

HtmlControl 基类

Web 控件

内部控件 数据绑定控件 扩展控件 验证控件

属于 System.Web.UI.WebControls 命名空间,并派生自 WebControl 基类

Page 10: 9 ASP.NET 基础

10/84

ASP.NET 的功能 7-6 ASP.NET 允许使用和创建 Web 服务

Web 服务是通过标准 Web 协议访问的可编程的应用程序逻辑 Web 服务利用 XML 和 HTTP 作为信息通道的一部分, ASP.NET 使其抽象化,使得构建基于 SOAP 的应用程序简单到只需编写应用程序逻辑

改进的安全性: ASP.NET 与 IIS 、 .NET 框架和操作系统所提供的基础安全服务配合使用,共同提供一系列身份验证和授权机制

Page 11: 9 ASP.NET 基础

11/84

ASP.NET 的功能 7-7 更高的可扩展性:

可在单独的机器或数据库的单独进程中维护会话状态,从而允许跨服务器的会话 状态管理:

ASP.NET 能够通过 cookie 、查询字符串、应用程序、 Session 等 进行有效的状态管理 配置和部署

将配置信息存储在基于 XML 的配置文件中,使得 ASP.NET 应用程序更易于部署

Page 12: 9 ASP.NET 基础

12/84

ASP.NET 的工作原理 3-1 ASP.NET 文件的体系结构

文件扩展名 说明.aspx 用于创建网页和对网页进行编程的核心文件类型.aspx.cs 由 ASPX 或 ASCX 文件继承的 C# 代码文件.ascx 指明一个 ASP.NET 用户定义控件.asax 包含 ASP.NET 应用程序级事件的事件语法.asmx 供宿主 Web 服务在本地或远程使用

Page 13: 9 ASP.NET 基础

13/84

ASP.NET 的工作原理 3-2 文件的体系结构(续)

文件扩展名 说明.axd 与 ASP.NET 应用程序跟踪有关联.vsdisco XML 文件,将链接公开给其他可描述

Web 服务的资源.htm 标准 HTML 文件,包含静态元素和内容.xml XML 文档,由 ASP.NET 应用程序使用.config 配置文件,用于设置应用程序的各种属性

Page 14: 9 ASP.NET 基础

14/84

ASP.NET 的工作原理 3-3

查询服务器上的网页 解释 .aspx 页 将页面内容编译为中间语言 (IL)

存储已预编译页面的本机代码版本

存储一些项目,以降低重建成本。

存储整个页面,包括对象和数据

Page 15: 9 ASP.NET 基础

15/84

主要内容 9.1 ASP.NET 简介 9.2 WEB 窗体 9.3 几个主要对象 9.4 ASP.Net 的数据绑定控件

DataList 控件 DataView 控件 GridView 控件

Page 16: 9 ASP.NET 基础

16/84

ASP.NET Web 窗体 Web 窗体是一项 ASP.NET 功能,可以使用它为 Web 应用程序创建用户界面 Web 窗体还提供了一个丰富的控件集,使用支持 .NET 的语言(如 Visual

Basic .NET 和 Visual C# 等)可对这些控件编程 通过使用 Web 窗体上的各种服务器控件,可在 ASP.NET 网站上检索和更新信息

Page 17: 9 ASP.NET 基础

17/84

Web 窗体的属性 2-1 Web 窗体的扩展名为 .aspx Web 窗体将 Web 应用程序分为两部分:

可视化组件用户界面编码逻辑

Web 窗体中包括代码声明块 包含 HTML 控件和服务器 控件 Web 窗体有各种指令来控制编译过程

Page 18: 9 ASP.NET 基础

18/84

Web 窗体的属性 2-2 @Page 指令定义一些特定于页面的属性,

ASP.NET 页面解析器和编译器将使用这些属性

设置 runat="server" 属性可确保在服务器端执行 Web 窗体

例如: <%@ Page language="c#" Codebehind="LoginForm.aspx.cs" AutoEventWireup="false" Inherits="Example1.WebLogionForm" %>

例如: <Form runat="server"> </Form>

Page 19: 9 ASP.NET 基础

19/84

Web 窗体的功能 实现多样式的 Web 用户界面客户端与服务器的分离 事件驱动的编程模型 .NET Framework 公共语言运行库支持 独立于浏览器的应用程序 直观、一致的对象模型 服务器的可扩展性

Page 20: 9 ASP.NET 基础

20/84

服务器

Web 窗体的生命周期 一个往返周期

Web 窗体

浏览器

信息发送给服务器

已处理

信息回送至浏览器

往返周期

已重新创建页面 删除页面信息

Page 21: 9 ASP.NET 基础

21/84

Web 窗体的 IDE Web 窗体的 IDE

菜单栏和工具栏

工具箱解决方案资源管理器

服务器资源管理器“属性”窗口

Page 22: 9 ASP.NET 基础

22/84

创建 Web 应用程序 在 .NET 环境中使用 Visual C# 构建一个

ASP.NET Web 应用程序

已创建虚拟目录

按照提供的名称创建解决方案和项目,同时还创建了默认引用和文件

Page 23: 9 ASP.NET 基础

23/84

默认的 Web 应用程序文件创建的文件 说明WebForm1.aspx 和WebForm1.aspx.cs 文件

它们组成一个单独的 Web 窗体页。 . aspx 文件包含 Web 窗体页的可视化元素,而 .aspx.cs 则包含用于 Web 窗体页的代码隐藏类

AssemblyInfo.cs 项目信息文件,包含有关某一个项目中程序集的元数据

Web.config 存储应用程序配置信息 Global.asax 和 Global.cs文件 用于处理应用程序级事件的可选文件Styles.css 级联样式表文件.vsdisco 文件 基于 XML 的文件,包含的链接指向为 XML

Web 服务提供发现信息的资源

Page 24: 9 ASP.NET 基础

24/84

Web 应用程序示例 3-1从 Web 控件工具箱中拖出两个标签控件 从 Web 控件工具箱中拖出两个文本框

从 Web 控件工具箱中拖出一个按钮拖出一个标签以显示消息

Page 25: 9 ASP.NET 基础

25/84

Web 应用程序示例 3-2private void btnSubmit_Click(object sender, System.EventArgs e){

// 检查”姓名“字段中的 Null 值if((txtName.Text.Trim() == “” || (txtName.Text == null))

{lblMessage.Text = “ 请输入姓名!!” ;

}

else{

// 检查年龄是否介于 1 和 100 之间if ((Convert.ToInt32(txtAge.Text) < 18) || (Convert.ToInt32(txtAge.Text)

> 100)){

lblMessage.Text=" 年龄无效!!” ;}else{

// 成功验证和欢迎消息lblMessage.Text=" 欢迎 "+txtName.Text;

}}

}

检查“姓名”字段中的 Null 值

检查指定范围中年龄的值

如果成功,则显示欢迎消息。

Page 26: 9 ASP.NET 基础

26/84

Web 应用程序示例 3-3

输入姓名

单击“提交”

显示欢迎消息

输入年龄

Page 27: 9 ASP.NET 基础

27/84

事件处理程序 ASP.NET 页框架在不同的阶段处理 Web 窗体页时都可能引发事件,并执行响应事件的事件处理程序 事件处理程序实际上就是一个子程序,执行任何给定事件的相关代码 ASP.NET 页面因其事件机制而显得格外新颖独特

Page 28: 9 ASP.NET 基础

28/84

Web 窗体页的生命周期 初始化页面

阶段 引发的事件Page_Init

加载页面 验证 事件处理

页面卸载

Page_Load

Validate

Form event handler

Page_Unload

页面显示之前 Page_PreRender

在页面处理的某些特定阶段,页面会自动触发一些事件。而与服务器控件相关联的其他事件则在服务器端触发并得到处理

Page 29: 9 ASP.NET 基础

29/84

主要内容 9.1 ASP.NET 简介 9.2 WEB 窗体 9.3 几个主要对象

9.4 ASP.Net 的数据绑定控件 DataList 控件 DataView 控件 GridView 控件

Response 对象Request 对象Server 对象

Page 30: 9 ASP.NET 基础

30/84

HttpResponse 9-1 HttpResponse 对象允许开发人员对当前页面的输出流进行访问此类可用于:

从输出页面读取 / 写入文本将用户重新定向到另一个页面有条件地结束应用程序连接设置 /获取输出内容类型检查客户端与服务器的连接状态读取 / 写入 Cookie

Page 31: 9 ASP.NET 基础

31/84

HttpResponse :常用属性 9-2

属性名称 说明Buffer 指定是否将 Web 窗体创建的输出存储在 IIS

缓存中,直到处理完当前页面中的所有服务器脚本

Cache 获得网页的缓存策略(过期时间、保密性等)

Page 32: 9 ASP.NET 基础

32/84

HttpResponse :常用属性 9-3

属性名称 说明ContentType 获得或指定响应的 HTTP 内容 (MIME) 类型

为 标 准 MIME 类 型 ( 如 text/xml 或 image/gif ) 。 默 认 的 MIME 类 型 是 text/html。客户端浏览器从输出流中指定的 MIME 类型获得内容的类型

Cookie 用于获得 HttpResponse 对象的 Cookie 集合

Expires 指定浏览器中缓存的页面过期之前的时间(以分钟为单位)

Page 33: 9 ASP.NET 基础

33/84

HttpResponse :常用属性 9-4

属性名称 说明Output 启用到输出 HTTP 响应流的文本输出OutputStream 启用到输出 HTTP 内容主体的二进制输

出,并作为响应的一部分

Page 34: 9 ASP.NET 基础

34/84

HttpResponse :常用属性 9-5

方法 说明Write 用于向当前 HTTP 响应流写入文本,使其

成为返回页面的一部分End

停止处理至客户端的输出,返回目前为止已创建的页面内容并触发 Application 对象的 EndRequest 事件

Redirect 将用户从请求页面重新定向或带到另一页面

Page 35: 9 ASP.NET 基础

35/84

HttpResponse :常用属性 9-6

控件 属性 值Label ID lblHdr

Label BackColor #E0E0E0

Label Text Response 对象的属性及它们的值

Label ID lblResponse

Label BackColor LightBlue

演示:示例 1

HttpResponse 对象不同属性的用法打开 VS.NET IDE 并创建名为‘ Example 1’ 的新项目 将默认 Web 窗体 (.aspx) 文件从‘Webform1.aspx’重命名为‘ ResponseProperties.aspx’ 通过向 Web 窗体添加两个标签为 Web 窗体设计界面ResponseProperties.aspx 的

GUI

按照表中的内容设置 ResponseProperties.aspx 上控件的属性

Page 36: 9 ASP.NET 基础

36/84

HttpResponse :常用属性 9-7将下列代码片段添加到页面的 Load 事件中private void Page_Load(object sender, System.EventArgs e)

{lblResponse.Text=lblResponse.Text + "[ HttpResponse.Buffer=" + HttpContext.Current.Response.Buffer + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.Cache=" + HttpContext.Current.Response.Cache + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.CacheControl=" + HttpContext.Current.Response.CacheControl + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.Charset=" + HttpContext.Current.Response.Charset + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.ContentType=" + HttpContext.Current.Response.ContentType + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.Expires=" + HttpContext.Current.Response.Expires + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.ExpiresAbsolute=" + HttpContext.Current.Response.ExpiresAbsolute + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.IsClientConnected=" + HttpContext.Current.Response.IsClientConnected + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.StatusCode=" + HttpContext.Current.Response.StatusCode + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.StatusDescription=" + HttpContext.Current.Response.StatusDescription + " ], ";lblResponse.Text=lblResponse.Text + "[ HttpResponse.SuppressContent=" + HttpContext.Current.Response.SuppressContent + " ], ";}

编译并运行示例

Page 37: 9 ASP.NET 基础

37/84

HttpResponse :演示:属性 9-8private void Page_Load(object sender, System.EventArgs e){ lblResponse.Text=lblResponse.Text + "[ HttpResponse. ContentType =" + HttpContext.Current.Response.ContentType + " ], "; }

显示 Response 对象的不同属性值

Page 38: 9 ASP.NET 基础

38/84

HttpResponse :演示:方法 9-9

private void btnRedirect_Click(object sender, System.EventArgs e){HttpContext.Current.Response.Redirect(this.txtURL.Text.Trim());}

private void btnEnd_Click(object sender, System.EventArgs e){ if(this.txtName_End.Text !="") { HttpContext.Current.Response.Write("您好 “ +this.txtName_End.Text + ", 欢迎学习 HttpResponse!!

<B> 这里采用 Response.End() 方法 </B>"); Response.End(); }}

private void btnSubmit_Click(object sender, System.EventArgs e){if(txtUserNm.Text !="") HttpContext.Current.Response.Write("您好 " + txtUserNm.Text

+ ", 欢迎学习 HttpResponse!! <B> 这里没有采用

Response.End() 方法 </B>");}

Page 39: 9 ASP.NET 基础

39/84

HttpRequest 5-1

服务器

服务器域名URL ,资源的名称

www.google.com

响应

这是 HTTP 请求

这是 HTTP 响应

Page 40: 9 ASP.NET 基础

40/84

HttpRequest 5-2 HttpRequest 对象封装客户端请求页面或提交表单时提供的信息。这些信息包括:

识别用户和浏览器的 HTTP 变量在客户端浏览器上为网站存储的 Cookie作为查询字符串或网页 <FORM> 部分的 HTML 控件值添加到 URL 的值如果是安全保护网站,有关网站安全的信息

Page 41: 9 ASP.NET 基础

41/84

HttpRequest 5-3

属性名称 说明Browser 获得有关请求浏览器能力的信息Form 获得网页中定义的窗体变量的集合QueryString 获得以名 /值对表示的 HTTP 查询字符

串变量的集合Params

获得由以名 /值对表示的 QueryString 、Form 、 Cookie 和 ServerVariables 组成的集合

该表列出了 HttpRequest 对象的常用方法和属性

Page 42: 9 ASP.NET 基础

42/84

HttpRequest 5-4

Url 返回有关当前请求的 URL 信息

方法名称 说明MapPath 将请求 URL 中提到的虚拟路径映射

到服务器上资源的实际物理路径

常用方法

Page 43: 9 ASP.NET 基础

43/84

HttpRequest 5-5private void Page_Load(object sender, System.EventArgs e){

lblRequest.Text=lblRequest.Text + "[ HttpRequest.Browser=" + HttpContext.Current.Request.Browser + " ], ";

lblRequest.Text=lblRequest.Text + "[ HttpRequest.Url=" + HttpContext.Current.Request.Url + " ], ";

lblRequest.Text=lblRequest.Text + "[ HttpRequest.UserHostAddress=" + HttpContext.Current.Request.UserHostAddress + " ], ";lblRequest.Text=lblRequest.Text + "[ HttpRequest.UserHostName=" +

HttpContext.Current.Request.UserHostName + " ], ";}

编译并运行程序

Page 44: 9 ASP.NET 基础

44/84

HttpRequest 方法private void Page_Load(object sender, System.EventArgs e){ HttpContext.Current.Response.Write("<B>"+ Server.HtmlEncode("MapPath(“RequestMethods.aspx”)")+ " 的输出结果是 : </B><br>" ); HttpContext.Current.Response.Write("<U>" + HttpContext.Current.Request.MapPath ("RequestMethods.aspx").ToString() + "</U><br><br>"); Response.Write("<B>" + Server.HtmlEncode("MapPath(“\\”)")+ " 的输出结果是 :<br> " + "</B><U>"+ HttpContext.Current.Request.MapPath("\\")+ "</U><br><br>"); Response.Write("<B>" + Server.HtmlEncode ("MapPath(“\\RequestMethods.aspx”)")+ " 的输出结果是 :<br> " + "</B><U>"+"<U>" + HttpContext.Current.Request.MapPath ("\\RequestMethods.aspx").ToString() + "</U>");}

Page 45: 9 ASP.NET 基础

45/84

HttpRequest : Querystring [ 提交前 ]

private void btnSubmit_Click(object sender, System.EventArgs e){ string strURL=""; strURL="TargetPage.aspx?Nm=" +

Server.UrlEncode(txtName.Text) + "&pwd="+ Server.UrlEncode(this.txtPwd.Text) ; HttpContext.Current.Response.Redirect(strURL);}

Page 46: 9 ASP.NET 基础

46/84

HttpRequest : Querystring [ 提交后 ]

private void Page_Load(object sender, System.EventArgs e){

string userNm=HttpContext.Current.Request.QueryString["Nm"];

HttpContext.Current.Response.Write("<Font color='Red'><B>欢迎 </B></Font>");

HttpContext.Current.Response.Write(userNm);Response.Write ("<B>你的密码是 :</B>"+

Request.QueryString["pwd"]);}

Page 47: 9 ASP.NET 基础

47/84

HttpServerUtility 对象 8-1

Execute 方法和 Transfer 方法 HTML 编码方法 MapPath 方法 URLEncode 方法

方法

HttpServerUtility 类包含处理 Web 请求的方法

Page 48: 9 ASP.NET 基础

48/84

HttpServerUtility 对象 8-2

Execute TransferURL 参数指定的页面处理完后,控制权会返回给先前的页面或调用此方法的页面,并且从此方法调用后的语句继续执行

URL 参数指定的页面处理完后,控制权不会返回给先前的页面,也不会返回给调用此方法的页面,并且在新页面完成执行时结束

注意: Server 对象的 Transfer 方法和 Execute 方法仅用于 Web 窗体将 Transfer 方法的 preserveForm 参数设置为 True ,可将窗体的 QueryString 、 ViewState 等信息提供给目标窗体

Execute 方法和 Transfer 方法均会停止当前页面的执行,并将用户带到由此方法的参数 URL 指定的页面

Page 49: 9 ASP.NET 基础

49/84

HttpServerUtility 对象 8-3

演示:示例 6

private void btnExec_Click(object sender, System.EventArgs e){ HttpContext.Current.Server.Execute ("ResponseProperties.aspx"); lblForExecute.Text="客户端调用 Execute 方法之后!! ";}

private void btnTransfer_Click(object sender, System.EventArgs e){ HttpContext.Current.Server.Transfer ("RequestProperties.aspx"); lblForExecute.Text=“客户端调用 Transfer 方法之后!! ";}

输出结果

Page 50: 9 ASP.NET 基础

50/84

HttpServerUtility 对象 8-4HTMLEncode 方法: 为了确保所有浏览器均能在 URL 字符串中正确地传送文本,需要使用 HTML 编码。 HTMLEncode 方法正是起这个作用的例如,如果输入文本包含 “ <” 和“ >” 字符,此方法会将这些字符转换为其对等的 HTML 字符,即分别为 &lt 和

&gt ,以便浏览器将这些字符正确地显示为“ <” 和“ >”

HTMLEncode(String)

要编码为 HTML 的文本 用于将输出存储为 TextWriter 流 语法

HTMLEncode(String,TextWriter)

Page 51: 9 ASP.NET 基础

51/84

HttpServerUtility 对象 8-5URLEncode 方法: 在 HTML 编码中,将文本编码成相应的 HTML 是为了在浏览器中正确地显示 如果是要求可靠的 HTTP 传输通过 URL 将编码文本从

Web 服务器传送到客户端,该怎么办? 可使用 URLEncode 方法实现此目的。它将文本编码以便于通过 HTTP 进行可靠的传输

语法要编码为 HTML 传输的文本 用于将编码输出存储为

TextWriter 流

URLEncode(String,TextWriter)URLEncode(String)

Page 52: 9 ASP.NET 基础

52/84

HttpServerUtility 对象 8-6

MapPath 方法: Web 应用程序位于 IIS 根目录下的虚拟目录中因此,我们请求网页时,引用称为“虚拟路径”的虚拟目录路径。但是经常需要得到 Web 服务器上的 Web 资源的实际物理路径 用 MapPath 方法,我们可从其虚拟路径得到 Web 资源(如 .aspx 页面)的物理路径

语法

MapPath(string path)

Web 服务器上的指定虚拟路径

Page 53: 9 ASP.NET 基础

53/84

HttpServerUtility 对象 8-7HTMLEncode 的使用

private void Page_Load(object sender, System.EventArgs e){ Response.Write("<B>测试 </B>表示用粗体显示 "); Response.Write("<BR>"); Response.Write("&lt;B&gt;测试 &lt;/B&gt;表示用粗体显示 "); Response.Write("<BR>"); Response.Write(Server.HtmlEncode(“<B>测试 </B>表示用粗 体显示 "));}

Page 54: 9 ASP.NET 基础

54/84

HttpServerUtility 对象 8-8

private void Page_Load(object sender, System.EventArgs e){ string MyURL; MyURL = "http://www.abc.com/articles.aspx?name =张 三 "; Response.Write(“ 这是用 Response.Write(Server.UrlEncode(MyURL)) 的结 果: "+ Server.UrlEncode(MyURL) +"<br>" ); Response.Write(" 这是用 Response.Write(MyURL) 的结果: "+MyURL);}

Page 55: 9 ASP.NET 基础

55/84

小结传递 Form表单中的控件值用 Request.Form 获取值 ,地址栏中传递的参数用 Request.QueryString获取 通常用 HttpResponse 类的属性

Buffer 、 Cache 、 Cookie 和 Expires 来设置站点的一些特性 HttpResponse 类的常用方法是 Write() 、 End() 和

Redirect() HttpServerUtility 类的 Execute() 和 Transfer() 的区别关键在于执行后控制权是否返回原先页面、 URLEncode() 和

HTMLEncode() 主要用于对 HTML 标签和 URL 进行编码,对站点或程序的安全具有重要意思, MapPath()获取物理路径时需要注意是绝对路径还是相对路径

Page 56: 9 ASP.NET 基础

56/84

主要内容 9.1 ASP.NET 简介 9.2 WEB 窗体 9.3 几个主要对象 9.4 ASP.Net 的数据绑定控件

DataList 控件 DataView 控件 GridView 控件

Page 57: 9 ASP.NET 基础

57/84

数据绑定简介 2-1

控件

数据

检索到的数据数据

欢迎 “ ”数据绑定是将数据链接到显示该数据的控件的过程

Page 58: 9 ASP.NET 基础

58/84

数据绑定简介 2-2

用于绑定控件的表达式置于 <%#......%> 标记之间

Page 59: 9 ASP.NET 基础

59/84

简单属性绑定

<asp:Image id="imgVote1" runat="server" Height="12px" Width="<%#vote1%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote1" Text="<%#vote1%>" runat="server"></asp:Label><asp:Image id="imgVote2" runat="server" Height="12px" Width="<%#vote2%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote2" Text="<%#vote2%>" runat="server"></asp:Label><asp:Image id="imgVote3" runat="server" Height="12px" Width="<%#vote3%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote3" Text="<%#vote3%>" runat="server"></asp:Label>

代码视图// 定义成员变量protected static int vote1 = 0;protected static int vote2 = 0;protected static int vote3 = 0; private void btnVote1_Click(object sender, System.EventArgs e){

vote1 += 1;this.DataBind();

}private void btnVote2_Click(object sender, System.EventArgs e){

vote2 += 1;this.DataBind();

}private void btnVote3_Click(object sender, System.EventArgs e){

vote3 += 1;this.DataBind();

}

HTML 视图 运行结果

Page 60: 9 ASP.NET 基础

60/84

表达式绑定

<asp:Image id="imgVote1" runat="server" Height="12px" Width="<%#4*vote1%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote1" Text="<%#vote1%>" runat="server"></asp:Label><asp:Image id="imgVote2" runat="server" Height="12px" Width="<%#4*vote2%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote2" Text="<%#vote2%>" runat="server"></asp:Label><asp:Image id="imgVote3" runat="server" Height="12px" Width="<%#4*vote3%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote3" Text="<%#vote3%>" runat="server"></asp:Label>

代码视图

HTML 视图 运行结果

// 定义成员变量protected static int vote1 = 0;protected static int vote2 = 0;protected static int vote3 = 0; private void btnVote1_Click(object sender, System.EventArgs e){

vote1 += 1;this.DataBind();

}private void btnVote2_Click(object sender, System.EventArgs e){

vote2 += 1;this.DataBind();

}private void btnVote3_Click(object sender, System.EventArgs e){

vote3 += 1;this.DataBind();

}

Page 61: 9 ASP.NET 基础

61/84

方法的结果绑定protected string GetVotePercent(int vote){

int sumVote = vote1 + vote2 + vote3;if (sumVote == 0){

return "0%";}else{

decimal percent = 100 * (Convert.ToDecimal(vote) /Convert.ToDecimal(sumVote));

return percent.ToString("n2") + "%";}

}

建立一个新方法

<asp:Image id="imgVote1" runat="server" Height="12px" Width="<%#vote1%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote1" Text="<%#GetVotePercent(vote1)%>" runat="server"></asp:Label><asp:Image id="imgVote2" runat="server" Height="12px" Width="<%#vote2%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote2" Text="<%#GetVotePercent(vote2)%>" runat="server"></asp:Label><asp:Image id="imgVote3" runat="server" Height="12px" Width="<%#vote3%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote3" Text="<%#GetVotePercent(vote3)%>" runat="server"></asp:Label>

调用方法的结果绑定运行结果

Page 62: 9 ASP.NET 基础

62/84

使用 DataList 控件显示数据 3-1

使用 Datalist 控件可以指定数据流

WELCOME

WELCOME

水平方式垂直方式

Datalist 控件

项模板

交替项模板页脚模板

页眉模板

编辑项模板选择项模板

分隔符模板也可以为 DataList 控件设置要显示的数据列数和行数

Page 63: 9 ASP.NET 基础

63/84

使用 DataList 控件显示数据 3-2示例: DatalistDemo.aspx

private void Page_Load(object sender, System.EventArgs e){

Response.Write(“<center><b><u>带有交替列的数据列表 </center>”+ “</b></u><br>");

if(!IsPostBack) {

DataTable mydt = new DataTable();DataRow mydr; mydt.Columns.Add(new DataColumn("Numbers“

, typeof(Int32)));mydt.Columns.Add(new DataColumn("Squares“

, typeof(Int32)));mydt.Columns.Add(new DataColumn("Cubes“

, typeof(Int32))); 续…

for (int i=0;i<30;i++){

mydr = mydt.NewRow();mydr[0] = i;mydr[1] = i * i;mydr[2] = i * i * i;mydt.Rows.Add (mydr);

}

dlMyList.DataSource = mydt;dlMyList.DataBind ();

}}

为 DataList 控件指定数据源

将数据绑定到 DataList

Page 64: 9 ASP.NET 基础

64/84

使用 DataList 控件显示数据 3-3示例的 HTML 视图

<asp:DataList id="dlMyList" RepeatDirection="Horizontal" RepeatColumns="10" runat="server">

<ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Numbers") %>

<br><%# DataBinder.Eval(Container.DataItem, "Squares") %><br><%# DataBinder.Eval(Container.DataItem, "Cubes") %><br>

</ItemTemplate>

<AlternatingItemTemplate><i><b><%# DataBinder.Eval(Container.DataItem, "Numbers") %></b><i><br>

<i><b><%# DataBinder.Eval(Container.DataItem

, "Squares") %><b><i><br><i><b><%# DataBinder.Eval(Container.DataItem, "Cubes") %><b><i><br>

</AlternatingItemTemplate></asp:DataList>

输出结果

Page 65: 9 ASP.NET 基础

65/84

使用 DataView 控件 3-1DataView 用于呈现 DataTable 中的数据的自定义视图

NAMES No DESIGAGE

1.

2.

3.

4.

ABC

DEF

LMN

XYG

27

60

57

33

PL

GM

MD

TL

职员数据

NAMES No DESIGAGE

2.

3.

DEF

LMN

60

57

GM

MD

Data View Age > 55

Page 66: 9 ASP.NET 基础

66/84

使用 DataView 控件 3-2employee 表的 DataView 控件仅检索年龄大于 55 的职员的记录

mydv = new DataView (ds.Tables ["employee"]);mydv.RowFilter = "age > 55";

Sort 属性用于以递增或递减顺序为行排序mydv.Sort = "fname ASC";

递增排列

Page 67: 9 ASP.NET 基础

67/84

使用 DataView 控件 3-3DataView 控件可以限制 employee 表中显示的行private void Page_Load(object sender, System.EventArgs e){

Response.Write(“<center><b><u> 数据视图 </center></b></u> <br>");SqlConnection objSqlConnection = new

SqlConnection("server=vijayk;uid=sa;pwd=playware;database=pubs");SqlDataAdapter objSqlAdapter = new SqlDataAdapter(

"select * from employee where job_id = 5", objSqlConnection);DataSet objDataSet = new DataSet();objSqlAdapter.Fill(objDataSet, "employee"); DataView objDataView = new DataView (objDataSet.Tables

["employee"]);objDataView.RowFilter = "job_lvl >180";objDataView.Sort = "fname ASC";dgMyGrid.DataSource=objDataView;dgMyGrid.DataBind();

}

输出结果

Page 68: 9 ASP.NET 基础

68/84

小结 1 数据绑定是将从数据库中检索到的数据链接到将显示这些数据的控件的过程 可对多种类型的数据执行数据绑定,例如:

表达式 数据库数据

DataGrid 、 DataList 和 Repeater 等控件可用于连接数据库并实现对数据库数据的进行数据绑定 DataList 控件可用于显示数据,而且支持指定数据流 模板用于将数据显示在浏览器和 DataList 控件中 DataView 可用于自定义 DataTable 中数据的显示。 DataView 中的数据可进行筛选、搜索和排列

Page 69: 9 ASP.NET 基础

69/84

GridView 控件 在 ASP.NET 2.0 以后,加入了许多新的功能和控件,相比 asp.net 1.0/1.1 ,在各方面都有了很大的提高。其中,在数据控件方面,增加了不少控件,其中的gridview 控件功能十分强大。以下介绍gridview 控件的简单使用。

Page 70: 9 ASP.NET 基础

70/84

数据库设置:我们新建 VOTE 数据库,在 VOTE 数据库中新建 INFO表,包括四个字段 id

int 类型,其值设置为自动加 1 ,同时 id 设为主键,此步置关重要,关系到以后实现 Gridview 的更新删除功能;    username

varchar 类型,表示姓名 password

varchar 类型,表示密码;   image

varchar 类型,图片保存的地址 再往此表中添加一些数据

Page 71: 9 ASP.NET 基础

71/84

1 、 首先,我们用 VS 新建一个站点,之后分别将工具栏中的 GridView 控件和sqldatasource 控件拖拉到窗口中。 Sqldatasource 是个数据源控件,使用它可以很方便地配置数据源,建立数据连接,几乎不需要写代码。我们使用 SQL SERVER 2000 中的VOTE 数据库,所以我们可以点选在拖拉该控件时,右边出现的“配置数据源 "就可以了,如下图:

Page 72: 9 ASP.NET 基础

72/84

2 、 之后,点新建连接按钮,建立一个新的数据连接。在本例中,我们选择localhost本地服务器,使用 SQL混合身份认证,并选择使用 VOTE 数据库,之后再点击 Test connection按钮,以测试连接是否成功,成功的话,点 "OK"完成,如下图 :

Page 73: 9 ASP.NET 基础

73/84

3 、之后,在弹出的窗口中,询问是否保存数据连接字符串到 web.config 文件中,如果选择保存,每次到要使用数据连接串时,只需要引用其名称就可以了,在本文中,我们将其命名为voteConnectionString。实际上,我们此时查看 web.config 文件,会发现有如下代码:

Page 74: 9 ASP.NET 基础

74/84

<connectionStrings> <add name="voteConnectionString"

connectionString="Data Source=.;Initial Catalog=vote;Persist Security Info=True;User ID=sa"

providerName="System.Data.SqlClient" /> </connectionStrings>

这行代码的作用就是可以代替我们在过去编写代码中写到的” Server=.;database=vote;uid=sa;pwd=”. 而我们以后在编程的过程中需要使用 windows 身份验证进入MSSQL数据库的时候 , 只需要把我们的 connection String 的内容后面再加一个属性 Integrated Security=True,表示以windows 集成验证模式进入数据库 ,UID,PWD 这些内容就没作用了 .

Page 75: 9 ASP.NET 基础

75/84

Persist Security Info 属性的意思是表示是否保存安全信息,其实可以简单的理解为 " 在数据库连接成功后是否保存密码信息 " , True表示保存, False表示不保存 默认为 True

具体可以通过 Connection 对象的 ConnectString 属性进行验证,如下所示 (MSSQL 的用户名为 SA密码 X)

Page 76: 9 ASP.NET 基础

76/84

4 、我们再点击下一步的时候会进行 SQL选取操作语句的设置,如图:

Page 77: 9 ASP.NET 基础

77/84

 这个界面的作用就相当于我们以前书写 SQL 语句,我们在此界面的下方就可以看到我们可视化操作对应行成的SQL 命令;

  因为我们现在要显示所有的数据,所以我们选中 *号。同时我们可以看到右边有 where, order by, 高级三个按钮, where 和 orderby 的作用与我们平时使用的一样,表示选取出符合条件的内容;表示选取的内容以哪个字段进行排序。我们这里要显示的是所有数据,所以不点这两个按钮 我们点击高级,选中生成 INSERT,UPDATE 和 Delete语句 , 作用是使我们可以直接用 GridView 进行数据的更新删除功能。  点击下一步,再点完成,这样就完成了我们的

SqlDataSource 的设置

Page 78: 9 ASP.NET 基础

78/84

 5、此时我们可以对最开始拉入的 GridVIew 控件进行操作了,点击右上角的三角形,选择 SqlDataSouce1 为数据源。  再点击编缉列,出现这个界面

Page 79: 9 ASP.NET 基础

79/84

  我们点击左下角的 id项,在右边的属性栏中的HeaderText属性中写入编号,点击 username项,设置为姓名,点击password 设置密码,点击 image ,设置为照片路径。如图 :  

Page 80: 9 ASP.NET 基础

80/84

这样我们就完成了本例在这个界面的操作过程,我们现在介绍一下这个界面的其它功能。   如图 :

  我们可以发现可用字段中有7个选项,他们的的作用是在 GridView 中显示不同的内容。 BoundFild, 用来显示纯文本,比如本例中就是显示的纯文本,所以都属于这个类型

Page 81: 9 ASP.NET 基础

81/84

CheckBoxFIeld 显示单选按钮列 HyperLinkFiled 显示超级链接列 ImageFiled 显示图片列 ButtonFiled 显示按钮列 CommandFiled 显示功能列,比如数据库的更新删除功能。 其中我们详解 BoundField纯文本列的属性值 DataField:  文本显示内容是绑定的表中的哪个字段 FooterText: 页脚所显示的内容 ConvertEmptyStringToNull: 对空字符串的处理是转化为空(即无视空格),还是将它视为一个空字符串 HtmlEncode: 是否以 Html格式进行编码 Insert Visible:Gridview 可以提供向数据库中添加(插入)新数据功能,此处表示本列的数据是否允许被插入,比如一些自动加 1 的 ID值就明显在插入数据时不需要添加

Page 82: 9 ASP.NET 基础

82/84

NullDisplayText :一些可以为空的字段为空时绑定到 gridview时就没有内容显示,这时用此处的内容是显示 ReadOnly : Gridview 提供编辑更新的功能,但一些字段比如主键是明显不能更改的,此时就必需设为只读。 ShowHeader :是否显示页眉 SortExpression :排序表达式 Visible :本列是否可见,即可以显示或隐藏本列数据.

Page 83: 9 ASP.NET 基础

83/84

六、点击 GridView右上解小三角形后,选中启用分页,启用删除和启用编缉功能。在自动套用模式处选择彩色。  在 page_Load 事件中加上代码 this.GridView1.PageSize = 1; (每一页只显示一条数据)  表示启动分页功能时每一页显示数据的条数; 至此我们己经完成了本例,得到的页面图如下:

Page 84: 9 ASP.NET 基础

84/84