简简单单学习ASP.NET之四
第一章 ASP.NET应用程序概述
本章概要:
本章主要阐述了VS2008在开发B/S结构应用程序时为.NET开发者所提供的许多优越之处,并且向大家介绍应用程序事件、页面事件等必备知识。
知识结构:
第一节 使用VS2008开发ASP.NET应用程序
ASP.NET框架与WEB FORM基础
对于全世界来说.NET是一个跨时代的技术产物,它集合了许多种优秀的技术于一身,创造性的使各种开发得到了高效的应用,而ASP.NET恰恰是.NET技术在WEB开发领域的一种延伸,它富有开创的使用了Web Form技术,将以忘复杂而难以应付的WEB开发变的简单和高效,想要学习ASP.NET就必须得对现在的各种WEB流行技术进行了解,才能真正的体验它的高效与强大。下面我将带着大家来回顾一下B/S开发的历史。
u HTML与HTML 表单(静态页面)
其实对于用于静态页面来说,大家并不是很陌生,它们是用一些HTML的标签与表单来组成的简单页面,这些页面,一般是不具有交互功能的,当然你可以在其中加入一些JavaScript脚本,来实现简单的交互应用,但是它们并不能实现一些复杂的业务处理,比如需要将用用户填写的表单保存在总公司的数据库中等等这样的复杂需求。
u 服务器端编程(动态页面)
服务器端开发的主要意义在于所有的页面请求是在服务器端进行处理的,大多数时候的请求都是很简单的一个“把这个文件发给我”。浏览器随后会按适当的形式解释这个文件:作为HTML页、一幅图、一个程序片、一个脚本程序等等。向服务器发出的较复杂的请求通常涉及到对一个数据库进行操作(事务处理)。其中最常见的就是发出一个数据库检索命令,得到结果后,服务器会把它格式化成HTML页,并作为结果传回来(当然,假如客户通过某种脚本语言具有了更高的智能,那么原始数据就能在客户端发送和格式化;这样做速度可以更快,也能减轻服务器的负担)。另外,有时需要在数据库中注册自己的名字(比如加入一个组时),或者向服务器发出一份订单,这就涉及到对那个数据库的修改。这类服务器请求必须通过服务器端的一些代码进行,我们称其为“服务器端的编程”。
在传统意义上,服务器端编程是用PHP脚本或JSP进行的,但更复杂的系统已经出现。其中包括基于ASP.NET的Web服务器->IIS,它允许我们用.NET语言进行所有服务器端编程。见图2-1
2. 启始页
当首次打开VS2008时,将会看到图2.1所示的VS2008窗口。
窗口顶部是典型的Windows菜单项及工具栏,应用程序的左边是用于访问工具和控件,以及在开发环境下连接其他服务器和数据库功能的选项卡,它们分别是工具箱和服务器资源管理器。
图2-1
打开VS2008,在起始页中单击文件->新建->项目后,就会看到VS2008可以建立的项目,在VS2008中可以分别为.Net 2.0 .Net 3.0 .Net 3.5三个不同的.Net框架版本来进行开发,保证了Vs2005版本的用户在升级后也可以用以前的.Net版本进行开发。新建项目见图2-2.
图2.-2
3. 创建第一个Web页面
我们在新建项目中选择Web项目->ASP.NET应用程序后点击确定,您就顺利建了第一应用程序了。建立后Vs2008后自动为您生成一个默认的ASP.NET页面(Default.aspx)。见图2.3。
在所有的语言学习起始都是通过实现一个Hello World来进行第一个样例的,我们学习ASP.NET也一样,我们也建立一个Hello World Web应用程序。
实现过程
1、 从左侧的工具箱中拖一个按钮到Web窗体中,然后在属性页中的Text属性设定为”Click Me”。
2、 双击此按钮Vs2008会自动将其跳转到Default.aspx.cs这个文件中。加入以下代码,完成设计工作。
Default.aspx页面控件标签:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Click Me"
onclick="Button1_Click" />
</div>
</form>
</body>
</html>
Default.aspx.cs后置代码实现:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("大家好,欢迎大家使有ASP.NET开发");
}
}
4. 项目和文件
一个项目包含内容文件、源代码文件及其类型的文件,例如,数据源和图片,通常情况下,项目内容被编译到程序集中,例如,可执行文件、动态链接库文件。
多数Web页面或用户控件的内容由服务器控件声明和XHTML组成。这些内容连同一些必要的指令及脚本组成了页面和用户控件的内容文件。Web页面的内容文件以.aspx为扩展名,用户控件则以.ascx为扩展名。ASP.NET还包含了引起其他类型的内容文件,表2-4列出了这些内容文件。
表2-4内容文件类型
文件类型 |
扩展名 |
页面 |
.aspx |
用户控件 |
.ascx |
Web服务 |
.asmx |
母版页 |
.master |
解析Web Form
在Vs2008的页面设计模式中有三种工作模式,在大部分工作中我们都比较喜欢用设计模式来进行页面控件的设计,因为这实在是太方便了,只需要一拖一撤,不需要你会XHTML知识,就可以将一个控件放置在Web Form中,Vs2008会自动帮你来生成服务器与XHTML相对应的标签。
但是随着你对ASP.NET的了解与熟练,你会发现通过设计页面来实现控件的微调与属性的设计就没有那么方便了,毕竟Vs2008不是一个网页设计工具,它在设计中是有一定缺陷的。这时我们就需要通过源页面这种设计模式来进行页面控件与属性的控件了。
1. Web Form 的内容
如果你以前一点儿html的基础都没有的话,可能这个页面中的内容会让你有点头痛,反之如果你有一些html的基础的话,你看这个页面你又会感觉这个页面有点奇怪,主要是因为这个页面并不是100%HTML标签组成的,因为这个文档中包含了一些扩展的ASP.NET控件标签。
基本上每一个页面都包含了标准的Html标签比如<html><head>和<body>,你可以在页面中插入比如<p><h1><h2><h3>或tables等。
在下面我列出了一个典型的ASP.Net源页面,其中对于非HTML标准标签我采用了黑体来重点显示:Default.aspx
<%@Page
Language="C#"
AutoEventWireup="true"CodeBehind="Default.aspx.cs"
Inherits="WebApplication11._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LabelID="Label1" runat="server" Text="Label">
</asp:Label>
<asp:TextBox ID="TextBox1" runat="server">
</asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
</html>
上面的页面经过ASP.NET引擎解释后,所有服务器端控件会被解释为标准的HTML返回到客户端,服务器端的优势在于其具有普通控件所无法比拟的服务器端事件支持功能。
2. Page页面指令
Default.aspx中第一行就是一个Page页面指令,它主要是向当前页面声明一些相关的属性。
<%@ Page
Language="C#"
AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication11._Default" %>
相关属性解释如下:
属性 |
值 |
说明 |
Language |
VB/C#/JS |
内联代码所使用的编程语言 |
AutoEventWireup |
True、false |
启用或者禁用自动绑定页的事件处理方法。这些方法的命名规范为page_event |
CodeBehind |
文件名 |
VS2008所使用代码隐藏文件的名字 |
Inherits |
类名 |
供页继承的代码隐藏类 |
3. Doctype类型
在使用VS2008的时候,在你建立一个新的ASP.NET应用程序后,选中代码模式,会发现DOCTYPE这个单词,这就是DOCTYPE (document type,文档类型)声明,用来说明你用的XHTML是什么版本。
但是在XHTML中DOCTYPE声明是必不可缺少的,它告诉浏览器和确认服务,该文档遵循哪一个xhtml版本.如果你没有设定文档中的DOCTYPE 声明,那么所设计的文档就不能正常显示.DOCTYPE声明中的关键部分是DTD(Document Type Definition,文档类型定义),它告诉浏览器该文档遵循的是那一个xhtml版本,面目前xhtml有以下三个版本:
过渡型(Transitional):比较宽松的DTD类型,依然能够使用html中的标记(要符合xhtml的书写规范),这个版本也是目前比较流行的.它的标记如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
严格型(Strict):只允许使用纯xhtml,主要使用css(样式单)和格式化元素编写文档,这个版本是标准的xhtml.它的标记如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
框架型(Frameset):在使用框架时定义的类型,支持需要使用框架的元素.它的标记如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
DOCTYPE声明必须放在每一个xhtml文档顶部(就是代码模式下的首行),在所在代码和标识之上.
选择一种适合自己的DOCTYPE声明是制作xhtml的第一步.如果你是刚刚接触xhtml,那么推荐你使用过渡型的声明;如果你对xhtml已经有了深入的了解,那么严格型是当仁不让的选择。
编写代码
1. Code-Behind模式
“Code Behind”就是所谓的代码分离。在一般的ASP.NET文件中,如果采用“Code Behind”技术的话,一般是用二种文件来创建一个ASP.NET的页面,其中一种是页面文件,以.aspx或者.ascx为扩展名,而另外一种是程序代码文件,一般以.vb或者.cs为扩展名。
“Code Behind”把界面代码和程序代码以不同的文件分离开,对于代码的重复使用,程序的调试和维护都是革命性的。特别是在ASP.NET中,它采用了面向对象的方式,子页面的逻辑可以从父页面中继承过来,如果还是按照以前的方式的话,不可避免就将页面的内容都要继承过来。这样将造成无法进行模块设计。和 ASP相比,ASP程序是把界面设计和程序设计混合在一起的(一般称其为“Code Beside”方式),因此当开发人员要修改应用程序界面布局的时候,就往往需要更改大量与界面无关的代码,如果对于代码量很大的程序,就是一项工作量不小的事情。
用“Code Behind”还有一个优点就是可以利用这种技术来有效的保护代码。这对于程序的安全性来说也是一个提高。在Visual Studio.NET写的Web窗体都是用“Code Behind”方式写的,如果不用Visual Studio.NET进行开发的时候,可以使用和ASP类似的方式,即代码嵌入到页面中去。
2. 添加事件
在ASP.NET中给控件添加事件有三种方法:
u 属性窗体设置
首先选择一个要添加事件的控件,选择之后在属性窗体中选择事件页,就可以为其添加一个事件了,见下图。
u 点击按钮
选择一个要添加事件的控件,双击此控件就可以为此控件添加一个默认的事件,但这种方式是有局限性的。具体操作见下图。
u 代码编写
这种方式是最传统的也是最有效的,首先在ASPX页面中选中要添加事件的控件,然后在控件中添加一个事件,之后再用手工的方式在后置代码页中手工添加所需的事件即可。
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "Here is some sample text.";
}
3. 智能提示
Visual Studio提供的许多智能技术主要来源于IntelliSense。它提供了一种类似于微软Office一类所提供的语法检测技术。开发人员可以用代码编辑器来添加、格式化和编辑代码。
对代码编辑器的改进包括更好的IntelliSense、代码段、智能标签和附加的格式选项。 IntelliSense可以帮助开发人员正确和高效地输入代码,它在将输入代码所需要的按键次数减少到最小的同时提高了开发人员的准确度。首先选择需要围绕的文本,打开在选定文本上的一个快捷菜单并选择“外侧代码”命令,“外侧代码”命令将显示完成列表,选取将要用来围绕选定文本的项。已保存代码突出显示为绿色,未保存代码用黄色来标记,自从源文件被打开以来未改变过的原始代码不突出显示。
u 大纲视图
大纲视图可以允许Visual Studio可以在代码编辑中将一个类、结构、命名空间折叠成一行,并只显示类名、结构名或者命令空间,这种智能的视图有利于在编写大量代码的情况下简化代码页面,使其看起来比较清爽。
u 成员智能提示
Visual Studio可以很清松实现代码的编写,初学者在学习编程之初,最大的一个烦恼就是忘记各种类库与方法名称,在Vistual Studio中当你录入一个类或者一个对象时,它会自动的显示出可以使用的所有方法,这种功能是非常强的,根据笔者多年开发的经验,现在还没有那一种软件开发工具能与微软的InteilSense来匹敌,即便是现在非常流行的Java开发工具Eclipse和Visual Studio比起来也逊色不少。
u InteilSense的设置
对于InteilSense的设置,我们可以选择工具->选项菜单进行设置即可。
第三章WEB FORM开发基础
本章概要:
本章主要向大家介绍一些做为ASP.NET开发人员必须了解的核心开发内容。
我们会向大家介绍ASP.NET开发模型、系统文件、和服务器端控件等等,同时我们也将会学习到如何将一个普通的HTML转换成为一个ASP.NET WEB应用程序,在最后我们会讨论一下服务器端事件.
知识结构:
第一节 简析ASP.NET应用程序
其实对WEB应用程序的概念是很难以界定的,它不像传统的桌面应用程序(我们只需要运行.exe文件即可),概括的来说一个WEB应用程序由WEB页、文档、代码、对象、可执行程序、图像以及IIS虚拟目录或子目录中的其他资源组成,换而言之,WEB应用程序要么是一个站点、要么是一个WEB服务。
每一个WEB应用程序都有自已独立的资源与配置,WEB应用程序是不能共享来之于其他WEB应用程序的资源与配置的,从技术上来说,每一个WEB应用程序都有一个属于自已的应用程序域,这样的好处就是当一个WEB应用程序出现了崩溃时,不会影响到其他应用程序。应用程序域在内存中是互相独立。
下图就向大家展现了一个WEB应用程序在内存中的布局模式
u ASP.NET文件类型
在ASP.NET中有许多的文件类型,对于这些文件类型的作用请见下表:
后缀 |
说明 |
.aspx |
一个ASP.NET WEB应用程序页面,主要包括了一些页面控件、CSS文件和大部分表示层的东西,用户也主要是通过这个文件来访问ASP.NET应用程序 |
.ascx |
一个ASP.NET用户控件,我们将再后面学习到 |
.asmx |
一个WEB SERVICE页面请求,我们将再后面学习到 |
Web.config |
ASP.NET WEB应用程序的配置文件 |
Global.asax |
一个全局页面事件控件文件 |
.CS |
代码后置文件,主要用于放置页面逻辑 |
u ASP.NET应用程序目录
每一个WEB 应用程序都应该有一个精心策划的目录结构,比如说你可能将所有的图片文件放在一个Image目录中。在VS2008中包含一些系统内置的目录,这些目录都有自已所特有的意义与作用。
目录 |
说明 |
Bin |
包含了所有ASP.NET中的编译组件。 |
App_Code |
包含了所有你需要动态编译的应用程序组件 |
App_GlobalResources |
存储了WEB的全局资源文件,可以通过这个目录来实现多语言支持 |
App_LocalResources |
其作用与App_GlobalResources作用有点类似,但主要是针对本地资源进行管理 |
App_Data |
用于存储数据文件的目录 |
App_themes |
用于存放样式模板文件 |
服务器端控件
ASP.NET以一种引人注目的方式来进行WEB程序开发,在以往的WEB开发模式中,程序员在开发WEB应用程序前必须先要了解与掌握HTML与一些WEB页面设计工作才可以开始进行开发,然后根据其要求进行修改,之后让其他动态语来生成这段HTML。
ASP.NET通过了服务器端控件解决了这个问题,这些控件可以自动化的创建与配置,当它们在服务器端运行后会自动的生成所需要的HTML代码返回给客户端。甚至更好的是我们可以把ASP.NET像传统的VB一样进行控件的拖放、事件的添加,大大的减少了服务器端开发的难度。
在前面一节中,我们建立一个拖放了一些控件建立了一个非常简单的WEB应用程序,实际上ASP.NET提供了二种类型的服务器端控件,这二种不同的控件在服务器端发挥着自已不同的作用。
HTML服务器端控件:这些控件是运行于服务器端的等价于HTML控件,当然做为一个老手来说还是更喜欢使用Html,因为这样来的更直接一些,HTML服务器端控件的出现就是为了解决以前一个传统的WEB应用程序向ASP.NET 应用程序过渡的问题,因为它们之间实在是太像了。
Web控件和Html控件虽然好多功能相同并且长得很像,但是它们的内部实现机制是完全不一样的,Web控件要比Html控件执行效率要好。
服务器端控件:服务器端控件看起来有点像HTML服务器端控件,但是它提供了更加丰富的对象模型与样式处理,它也提供了非常多的事件处理功能,WEB服务器端控件也提供了一些看起来不像HTML标签一样的控件,比如GridView、Calendar、Validation控件等等。
4. 转化HTML页面到ASP.NET页面
下面我将向大家展示如何转化一个标准的HTML页面到ASP.NET页面中。
首先我们先做一个标准的HTML表单页面出来。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>转换工具</title>
</head>
<body>
<form method="post">
<div>
转换:
<input type="text" />
美元到人民币.
<br /><br />
<input type="submit" value="OK" />
</div>
</form>
</body>
</html>
看样子这个HTML表单什么功能都没有提供,只是给了用户一个界面而以,现在我们要把这个HTML页面转化成为一个ASP.NET页面,转化是非常简单的,只需要将所有的Form加上runat这个标签,所有的输入控件加入runat这个标签基础上就可以了。以下就是转化之后的代码。
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="CurrencyConverter.aspx.cs"
Inherits="CurrencyConverter" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>转化程序</title>
</head>
<body>
<form runat="server">
<div>
转换:
<input type="text" ID="US" runat="server" />
美元到人民币
<br /><br />
<input type="submit" value="OK" ID="Convert" runat="server" />
</div>
</form>
</body>
</html>
在转化完之后,我们就可以为它添加一个转化处理事件,但当我们双击Convert按钮之后会发现,此控件默认激发的事件是一个javascript脚本,这一点儿是和服务器端控件有所不同的,服务器端控件的事件是在服务器端进行处理的,而HTML服务器端控件的事件处理是在客户端完成的,见以下代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script language="javascript" type="text/javascript">
function Convert_onclick()
{
var returnValue=document.getElementById("US").value;
document.write(returnValue*6.9);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
转换美元到人民币:<input id="US" type="text" /><br />
<input id="Convert" type="button" value="button"
onclick="return Convert_onclick()" />
<br />
</div>
</form>
</body>
</html>
5. View State简介
我们可以在VS中按F5来运行这个程序,在运行这个程序后,你会发现所有我们在源程序中加入的runat=”server”属性都不见,因为这段程序在服务器端被解释后转化成为HTML发送了回来(因为runat=”server”这个属性是无法在客户端进行解释的,浏览器根本不支持这个标签,这个标签只在服务器端被支持),其次你会发现有一个隐藏控件被加了进来,并且value属性中是一堆你根本就看不懂的乱码,请看以下代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>货币转化</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="CurrencyConverter.aspx">
<div>
<input type="hidden" id="__VIEWSTATE" name="__VIEWSTATE" value="dDw3NDg2NTI5MDg7Oz4=" />
</div>
<div>
转化:
<input type="text" id="US" name="US" />
美元到人民币
<br />
<br />
<input type="submit" value="OK" id="Convert" name="Convert" />
</div>
</form>
</body>
</html>
这个隐藏控件用加密与压缩格式中存储着这个页面中所有控件的状态,由于HTTP是一种无状态协议,为了保证页面能保存每一个控件的状态,所以就通过一种叫View State的技术保存住每一个控件运行状态的信息。
6. HTML控件类
在我继续这个美元与人民币转换程序之前,我们再了解一点儿关于HTML 服务器端控件的事情,首先所有的HTML服务器端控件都被定义在System.Web.UI.HtmlControl这个命名空间中,每一种类型的控件都是一个独立的类。
一般情况下在不需要与后台进行交互时就使用HTML控件,它的占用的资源比较少,速度也比较快,在需要与后台进行交互时,就使用WEB控件,或者在HTML控件上加上runat="server" 也可以将一个HTML控件转换成交互控件,但这样占用的资源就和Web控件没任何分别了。
WEB控件可以响应服务器端事件,可以在后台代码中设置相关属性和方法等!HTML不可, WEB服务器控件需要通过服务器处理后译为HTML控件再发送给浏览器,所以比较耗费服务器资源,并由于有ViewState,所以在回送的时候会保持控件状态(也可以设置不保存)也因此增加了回送信息量。HTML直接发送到浏览器,不另耗费服务器资源,但无状态保存。
获得HTML控件的值,需要使用REQUEST的FORM方法,WEB控件就可以直接通过属性直接处理。
所以,一般来说,对于不需要保存控件状态,并无什么对值处理的地方就可以使用HTML 如果需要对控件进行动态的处理,或要保存其状态等就可以WEB服务器控件,WEB服务器控件用起来个人认为要方便些,但是就是另外多耗费服务器资源。
在下表中我们会向大家展示这些HTML服务器端控件。
控件 |
相对应的HTML 标签 |
HtmlForm |
<Form> |
HtmlAnchor |
<a> |
HtmlTable |
<table><tr><th><td> |
HtmlInputButton |
<input type=”button”> |
HtmlInputSubmit |
<input type=”submit”> |
HtmlInputReset |
<input type=”reset”> |
HtmlButton |
<button> |
HtmlInputCheckBox |
<input type=”CheckBox”> |
HtmlInputRadioButton |
<input type=”radio”> |
HtmlInputText |
<input type=”text”> |
HtmlInputPassword |
<input type=”password”> |
HtmlTextArea |
<textarea> |
HtmlInputImage |
<input type=”image”> |
HtmlInputFile |
<input type=”file”> |
HtmlInputHidden |
<input type=”hidden”> |
扩展知识
asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等。这里我主要说说html控件、html服务器控件和web服务器控件的区别。
1 html控件:就是我们通常的说的html语言标记,这些语言标记在已往的静态页面和其他网页里存在,不能在服务器端控制的,只能在客户端通过javascript和vbscript等程序语言来控制。
<input type="button" id="btn" value="button"/>
2 html服务器控件:其实就是html控件的基础上加上runat="server"所构成的控件.它们的注意区别是运行方式不同,html控件运行在客户端,而html服务器控件是运行在服务器端的。微软官方资料是这样说的:
当ASP.NET 网页执行时,会检查标注有无runat 属性,如果标注没有设定,那么Html标注就会被视为字符串,并被送到字符串流等待送到客户端,客户端的浏览器会对其进行解释;如果Html标注有设定runat="server" 属性,Page 对象会将该控件放入控制器,服务器端的代码就能对其进行控制,等到控制执行完毕后再将Html服务器控件的执行结果转换成Html标注,然后当成字符串流发送到客户端进行解释
<input id="Button" type="button" value="button" runat="server" />
3 web服务器控件:也称asp.net服务器控件,是Web Form编程的基本元素,也是asp.net所特有的。它会按照client的情况产生一个或者多个html控件,而不是直接描述html元素。如:
<asp:Button ID="Button2" runat="server" Text="Button"/>
那么它和html服务器控件有什么区别呢?参照其他网页的资料看法如下:
1、 Asp.net服务器控件提供更加统一的编程接口,如每个Asp.net服务器控件都有Text属性。
2、 隐藏客户端的不同,这样程序员可以把更多的精力放在业务上,而不用去考虑客户端的浏览器是ie还是firefox,或者是移动设备。
3、 Asp.net服务器控件可以保存状态到ViewState里,这样页面在从客户端回传到服务器端或者从服务器端下载到客户端的过程中都可以保存。
4、 事件处理模型不同,Html标注和Html服务器控件的事件处理都是在客户端的页面上,而Asp.net服务器控件则是在服务器上,举例来说:
<input id="Button4" type="button" value="button" runat="server"/>
是Html服务器控件,此时我们点击此按钮,页面不会回传到服务器端,原因是我们没有为其定义鼠标点击事件。
<input id="Btn4" type="button" value="button" runat="server" onserverclick="test" />
我们为Html服务器控件添加了一个onserverclick事件,点击此按钮页面会发回服务器端,并执行test(object sender, EventArgs e)方法。
<asp:Button ID="Button2" runat="server" Text="Button" />
是Asp.net服务器控件,并且我们没有为其定义click,但是我们点击时,页面也会发回到服务器端。由此可见:Html标注和Html服务器控件的事件是由页面来触发的,而Asp.net服务器控件则是由页面把Form发回到服务器端,由服务器来处理。
Page类
在ASP.NET的页面中,基本上所有的页面都派生于System.Web.UI.Page这个类,通过继承这个类,我们会使我们的页面得到的许多功能,比如缓存、页面验证、转向等等功能,这些功能我们都会在后续的章节中向大家介绍。
在下表中我们将会提供一些Page类中的基本属性。
属性 |
说明 |
IsPostBack |
在ASP.NET使用Page.IsPostback,就可以避免往返行程上的额外工作:如果处理服务器控件回发,通常需要在第一次请求页时执行代码,该代码不同于激发事件时用于往返行程的代码。 如果检查Page.IsPostBack属性,则代码可按条件执行,具体取决于是否有对页的初始请求或对服务器控件事件的响应。这样做似乎很明显,但实际上可以忽略此项检查而不更改页的行为。 该属性用的好坏,直接关系到你程序运行是否按照你最初的意愿,也关系到整个页面的效率。因为,如果每次都会给控件绑定数据,不管你是第一次访问,还是提交了数据以后,那么这个页面程序的效率可想而知。 |
EnableViewState |
在服务器端保存了网页各个控件及页面的状态,这其中包括各个控件在页面上的布局,和他们各自的属性。这些值就保存在ViewState下。 |
Application |
获取当前页面的Application信息 |
Session |
获取当前页面的Session信息 |
Cache |
获取当前页面的Cache信息 |
Request |
获取到HttpRequest对象,主要用于得到一些表单与Post信息 |
Response |
获取到HttpResponse对象,主要用于向页面输出信息 |
Server |
获取一个HttpServerUtility对象 |
1. 转向到一个新的页面
对于将一个页面转向到其他页面,这是一个经常使用到的功能,这个时候我们就可以使用以下方向进行页面转向。
Response.Redirect("newpage.aspx");
Response.Redirect("http://www.prosetech.com");
除了可以使用Response.Redirect()方法进行页面转向之外,我们也可以使用Server.Transfer()这个方法来进行页面转向。那么它们之间有什么不同哪?
运行方式:
Response.Redirect():
浏览器ASP文件请求->服务器执行->遇到response.redirect语句->服务器发送response.redirect后面的地址给客户机端的浏览器->浏览器请求执行新的地址。
Server.Transfer():
浏览器ASP文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件。
切换对象:
Response.Redirect():
Response.Redirect可以切换到任何存在的网页。
Server.Transfer():
Server.Transfer只能切换到同目录或者子目录的.aspx网页
数据保密:
Response.Redirect():
Response.Redirect后地址会变成跳转后的页面地址
Server.Transfer():
Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。
传递的数据量:
Response.Redirect():
Response.Redirect能够传递的数据以2KB为限
Server.Transfer():
没有具体的限制
页面特殊字符编码
在Html页面中有一些符号与标签是具有特殊意义的,比如说<>这个符号,但是有的时候我们又需要在页面中进行显示。
比如说我们在HTML中编写以下代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
Enter a Word<Here>
</body>
</html>
那么最终你后发现,我们想要的<>没在页面中显示出来,那是因为在HTML中<>是不能直接用的,必须用其他特殊的符号来替代。在HTML中常用的特殊字符替代符号如下:
结果 |
说明 |
替代之后的符号 |
空格 |
空格 |
|
< |
大于号 |
< |
> |
小于号 |
> |
& |
|
& |
“ |
双引号 |
" |
对于这种特殊字符的转换替代符号还有许多许多,有的时候我们可以自行进行转换与解决,但是对于数量比较多的情况下,可能就需要程序代劳了,幸好ASP.NET为我们提供了Server.HtmlEncode方法,通过这个方法我们可以非常容易实现特殊字符的转化工作。
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>
没有进行HTML特殊字符转化------</h1>
<span id="demo1" runat="server"></span>
<hr />
<h1>
进行了HTML特殊字符转化------</h1>
<span id="demo2" runat="server"></span>
</div>
</form>
</body>
</html>
程序代码:
protected void Page_Load(object sender, EventArgs e)
{
demo1.InnerHtml = "<B>看没有看到这个是黑体的</B>";
demo2.InnerHtml = Server.HtmlEncode("<B>看没有看到这个是黑体的</B>");
}