ASP.NET入门教程(经典)

中国ASP.NET开发网整理,转载请注明出处。

1 ASP.NET简介

1.1 什么是ASP.net

ASP.net 是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.net提供许多比现在的Web开发模式强大的的优势。

 执行效率的大幅提高

ASP.net是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多。

 世界级的工具支持

ASP.net构架是可以用Microsoft®公司最新的产品 Visual Studio.net开发环境进行开发,WYSIWYG(What You See Is What You Get所见即为所得)的编辑。这些仅是ASP.net强大化软件支持的一小部分。

 强大性和适应性

因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上(笔者到现在为止只知道它只能用在Windows 2000 Server上)。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。

简单性和易学性

ASP.net是运行一些很平常的任务如表单的提交客户端的身份验证、分布系统和网站配置变得非常简单。例如ASP.net页面构架允许你建立你自己的用户分界面,使其不同于常见的VB-Like界面。另外,通用语言简化开发使把代码结合成软件简单的就像装配电脑。

 高效可管理性

ASP.net使用一种字符基础的,分级的配置系统,使你服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为"Zero Local Administration"的哲学观念使Asp.net的基于应用的开发更加具体,和快捷。一个ASP.net的应用程序在一台服务器系统的安装只需要简单的拷贝一些必须得文件,不需要系统的重新启动,一切就是这么简单。

多处理器环境的可靠性

ASP.net已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大的提高运行速度。即使你现在的ASP.net应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高他们的效能,但现在的ASP确做不到这一点。

自定义性,和可扩展性

ASP.net设计时考虑了让网站开发人员可以在自己的代码中自己定义"plug-in"的模块。这与原来的包含关系不同,ASP.net可以加入自己定义的如何组件。网站程序的开发从来没有这么简单过。

安全性

基于Windows认证技术和每应用程序配置,你可以确性你的原程序时绝对安全的。(但是Asp的经验告诉我们,不能这么自信,M$老是会出Bug的)

1.2 本篇教程的主要内容

 ASP.net 的语法

ASP.net 的语法有可能对老的ASP程序员来说很熟悉,但也有一些是全新的东西,QuickStart教程将在细节上全部谈到它们。

ASP.net 的结构和特征

介绍ASP.net的所有特性,是ASP开发者可以编写交互性的世界级的应用软件,用比以前少的多时间和精力。

最佳话的练习

引用了一些练习题和如何回避在程序开发中潜在地容易犯的错误的方法,是开发更加顺利。

为那些人编写的

如果你从来没有开发过网站程序,那么这不适合你,你应该至少掌握一些HTML语言和简单的Web开发术语。你不需要先前的ASP开发经验(当然有经验更好),但是你必须了解交互式Web程序开发的概念,包含窗体,脚本,和数据接口的概念。

2 ASP.NET控件

2.1 ASP.net 入门

通常谈一个学科,我们老是说,它入门很简单的嘛,ASP.net也是。ASP.net提出一个概念,就是认为WEB页面,也是一个窗体,所以,学习过面向对象编程的VB VC BC Dephi的朋友,学起来就简单多了。

一个ASP.net页面的后缀名是".aspx",所以,IIS在你安装完ASP.net时,也会把Default.aspx作为你的默认首页,网管朋友一定要注意了。

ASP.net 是后天编译运行的,只是在第一次运行时编译,所以,以后的运行速度比ASP执行快。

2.2 写自己第一个ASP.net的程序

激动吗?很快就开始写第一个程序了,一般学任何语言都要Hello World!一下吧,那我们也来。
在这之前写要说一下,ASP.net的程序可以用任何东西写,甚至是Windows的记事本。

3 输入验证控件

3.1 ASP.net解决了ASP的难题:验证表单填写的正确性

如今的商业网站,或者个人网站,多少都有客户调查啊,用户注册之类的东西,必然会用到表单,这些表单的填写正确与否,明显是由手写代码的方式来控制的。我承认编写代码,是一项有趣的工作,不过每次验证表单都来手写代码,我们希望提高我们的工作效率,并不是把我们很有限的时间花在表单的验证工作上。
基于另外的一些原因,Web应用程序很不好验证用户的输入,HTML 3.2 规范可以让你控制用户的反馈,但恶意的或者技术高超的用户可以绕过,因此即使有了浏览器端的手写代码,服务器端同样也需要验证,才能保证安全。

下面是微软的工作人员,给出的商业网站用手写代码控制表单验证的弊病。

1. 尽管错误信息或图标经常与输入元素相邻,但是它们几乎总是位于表的不同单元格中。
2. 页面中经常会有一个区域来汇总所有错误。
3. 许多站点包含客户端脚本,以便提供更快捷的反馈,同时防止白白地在与服务器之间往返。
4. 许多包含客户端脚本的站点在出现错误时会显示信息框。
5. 不仅会验证文本输入,还会验证下拉列表和单选按钮。
6. 如果某个字段为空,站点通常会显示与该条目无效时不同的信息或图标。
7. 许多有效性检查可以很好地代替常用的表达式。
8. 验证通常是基于两个输入之间的比较结果。
9. 以上的验证任务是一些常见的操作,例如检查姓名或邮政编码。大多数站点似乎仍在重复进行这些工作。
10. 因为站点之间的差别通常太大,无法获得一种完美的解决方案来处理每个站点的所有验证任务。

如果你想向你的同事证实你有一种很"酷"的方法,可以禁止在姓名字段里面输入空值,记得选择ASP.net,并且看下面的教程。

3.2 ASP.net进行表单验证的过程

1. aspx文件被编译,运行
2. 用户输入数据
3. 触发Page_Load事件
4. 更改Web控件属性,提示哪里没有输入
5. 将页面用Html重新输出给用户
6. 再次提醒用户输入

3.3 Page_Load 过程

Page 对象包含一些与服务器端验证有关的重要属性和方法。下表列出了Page_Load属性的所有Collect和methed。 

Page_Load方法名
说明
IsValid
(最经常使用)
这是最有用的属性。该属性可以检查整个表单是否有效。通常在更新数据库之前进行该检查。只有 Validators 集中的所有对象全部有效,该属性才为真,并且不将该值存入缓存 。
Validators
该页所有验证对象的集合。这是实现 IValidator 界面的对象的集合。
Validate
在验证时调用的一种方法。在 Page 对象上默认的执行方式是转至每个验证器,并要求各验证器自行评估。

3.4 用来验证表单的验证器(Web控件)

验证控件
说明
RequiredFieldValidator
检查用户是否输入或选择了任何内容
RegularExpressionVali-dator
根据规则表达式检查用户输入。该过程允许进行许多种类的检查,可以用于邮政编码和电话号码等的检查。
CompareValidator
将输入控件与一个固定值或另一个输入控件进行比较。例如,它可以用在口令验证字段中。也可以用来比较输入的日期和数字。
RangeValidator
与 CompareValidator 非常相似, 只是它用来检查输入是否在两个值或其它输入控件的值之间。
CustomValidator
允许用户编写自己的代码以加入到验证框架中。

4 数据绑定 DataBind

这一讲是ASP.net系列讲座中最重要的一讲,包括服务器控件,数据库操作等所有涉及操作数据的控件都会用到 DataBind,也就是说DataBind这一讲,已经开始讲ASP.net核心的问题了。其实DataBind的概念已经提出很长时间了,在ASP中也有应用,只是大家不是很注意而已。 但在ASP.net中,已经把它提升到了一个核心的高度。

4.1 简单介绍 DataBind

DataBind包括三大方法,Repeater,DataList和DataGrid,这些控件都位于 System.Web.UI.WebControls 命名空间中,从 WebControl 基类中直接或间接派生出来的。这些方法都是通过HTML来显示数据的内容。

4.2 建立DataBind

所有的DataBind都应该用DataBind() 函数来建立(注意如果你用的是C#,请注意大小写)数据绑定,是整个页面PAGE和所有控件的一个方法,也就是说,他可以被所有的控件使用,你建立数据绑定的时候,DataBind可以作为控件的一个子项,比如DataList1.DataBind(),再比如 Page.DataBind(),会绑定整个页面。DataBind 常在页面载入时就被绑定。下面这个例子就是这个情况。

VB

Protected   Sub  Page_Load(Src  As   Object , E  As  EventArgs)
DataBind()
End Sub

C#

protected   void  Page_Load( object  sender, EventArgs e)
{
DataBind();
}

4.3 开始使用简单的数据绑定

看这个例子:

VB

Sub  SubmitBtn_Click(sender  As   Object , e  As  EventArgs)
Page.DataBind
End Sub

C#

protected   void  Button1_Click( object  sender, EventArgs e)
{
Page.DataBind();
}

.ASPX文件内容:

< B > 帮韦小宝选择一个老婆 B >
< form  runat =server >
 
< asp:DropDownList  id ="StateList"  runat ="server" >
< asp:ListItem > 阿珂 asp:ListItem >
< asp:ListItem > 曾柔 asp:ListItem >
< asp:ListItem > 建宁 asp:ListItem >
< asp:ListItem > 沐公主 asp:ListItem >
< asp:ListItem > 双儿 asp:ListItem >
< asp:ListItem > 教主夫人 asp:ListItem >
 
asp:DropDownList >
 
< asp:button  Text ="Submit"  OnClick ="SubmitBtn_Click"  runat =server />
 
< p >
 您帮韦小宝选择的老婆是 :
< asp:label  text ='<%#  StateList.SelectedItem.Text % > ' runat=server/>
form >
我们看到,那个选择老婆的地方没有使用什么控件,但是他却能正确的显示我们的选择结果,这个是就捆绑的结果,注意
<% # StateList.SelectedItem.Text  %> 这句话,正是它让我们取得了捆绑的数据。更多的地方,我们会经常看到这样的例子,好像程序里面什么都没有,但数据已经绑定在上面了。

5 数据库的操作

自若干年前推出开放式数据库连接 (ODBC) 应用程序编程接口 (API) 以来,出现了各种各样的数据库访问技术,而 ADO.NET 是其中最新的一种。在这过程中,发生了许多有趣的事。例如,COM 闯入数据库领域,开始培植 OLE DB 的殖民进程。 然后,大致相当于 OLE DB 自动化版本的 ActiveX? Data Objects (ADO) 被选来统治 Windows? 数据库开发者的 Visual Basic? 和 ASP 社区。

通过 .NET,Microsoft 正在提供通用框架(即 Framework Class Library),其中将包括所有现有的 Windows API 甚至更多的内容。特别值得一提的是,它包括大量常用的库,而这些库现在需要通过各个 COM 对象分别获得。在这些库中,您会发现 XML 和 ADO 对象模型,它们被集成到了叫做 ADO.NET 的类子树中。
ADO.NET 事实上成为构建数据感知 .NET 应用程序的基础。和 ADO 不同的是,ADO.NET 遵循更通用的原则,不那么专门面向数据库。ADO.NET 集合了所有允许数据处理的类。这些类表示具有典型数据库功能(如索引、排序和视图)的数据容器对象。尽管 ADO.NET 是 .NET 数据库应用程序的权威解决方案,但从总体设计上来看,它不象 ADO 模型那样以数据库为中心,这是 ADO.NET 的一大特点。

ADO.NET 与 ADO 有很大差异。ADO.NET 是新的数据访问编程模型,需要开发人员的全面理解、投入和新思维。然而,一旦开始掌握 ADO.NET,您将意识到:原有的 ADO 技巧非常有助于您以不同、却更巧妙和可靠的方式来创建有效的应用程序和解决各种老问题。
(以上译自 Microsoft .NET部一位官员的讲话)

5.1 目前的ADO.net

目前 ADO.NET 提供了两种托管提供程序:一种用于 SQL Server 7.0 或更高版本,另一种用于其他所有您可能已经安装的 OLE DB 提供程序。在这两种情况下您分别使用不同的类,但遵循相似的命名规则。除前缀外,名称都是相同的。前一种情况前缀为 SQL,后一种情况则是 ADO。

VB

Imports  System.Data.DAO
Imports  System.Data.Sql

C#

using  System.Data.DAO;
using  System.Data.Sql; 

您应该使用 SQL 类访问 SQL Server 表,因为它们直接进入数据库服务器的内部 API,跳过了由 OLE DB 提供程序表示的中间层。ADO 类是 OLE DB 提供程序上的 .NET 接口,它们使用 COM Interop 桥进行工作。

5.2 连接一个数据库

VB

Dim  myConnection  As   New SQLConnection( " server=localhost;uid=sa;pwd=;database=pubs " )
Dim  myCommand  As   New SQLDataSetCommand( " select * from Authors " , myConnection)

C#

SqlConnection myConnection  =   new  SqlConnection ( " server=localhost;uid=sa;pwd=;database=pubs " );
SqlCommand myCommand 
=   new  SqlCommand ( " select * from Authors " , myConnection);

这里我们需要讲述一下Connection的方法和属性了。

ConnectionTimeout
超时
DataBase
缺省数据库
DataSource
DNS
UserID
用户名,原来叫UID
Password
密码
State
取得目前连接的状态
Open()
打开
Close()
关闭

6 几个重要文件

使用ASP的同仁们一定经常使用这些东西,因为不管什么产品的开发都离不开与用户的互动,而在ASP中,他们三个,正是互动的桥梁。
ASP.net中,他们也受到了足够的重视,但改变不是很大。

6.1 Application

Application的生命周期

Application的生命周期,并不是是从IIS5开始启动的那一刻开始,而是从客户对服务器发出第一个Request的那个时候开始的。从那时开始一个名叫HTTPApplication的Pool开始建立,这也是Application生命周期(lifetime)的开始。此时Application_OnStart的事件也发生了。直到Application_OnEnd的事件发生,才是Application生命周期的结束。

Application写的网站计数器

VB

Application.Lock()
Application(
" counter " =   CType (Application( " counter " +   1 , Int32)
Application.UnLock() 

C#

Application.Lock();
Application(
" counter " =  Convert.ToInt32(Application( " counter " ))  +   1 ;
Application.UnLock();

与ASP中还是一样的。

Application与ASP中的不同的地方

Application与ASP不同的地方在于新多了两个事件Application_OnRequest Start()和Application_OnRequestEnd() 这两个事件,在用户开始浏览一个aspx文件,和aspx文件运行结束时触发,也就是说,这两个事件,不是针对整个服务器来说的,而是对于单个程序来说。

6.2 Session

在ASP中,我们都知道,如果用户把浏览器上面的Cookies关掉,那么Session就不可能被传递了,ASP.net针对这个问题,提出Session的传递应该脱离Cookies。我们修改一下config.web,还记得这个文件吗?ASP.net的无安装化程序移植的精髓,都在这样的一个文件中。

修改如下地方:

改为True就可以了

其他地方 Session和ASP没有什么区别。

7 如何存取SQL Server数据库图片

SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQL Server中存储和读取图片。

1、建立一个表:

在SQL SERVER中建立这样结构的一个表:

列名 类型 目的
ID Integer 主键ID
IMGTITLE Varchar(50) 图片的标题
IMGTYPE Varchar(50) 图片类型. ASP.net要以辨认的类型
IMGDATA Image 用于存储二进制数据

2、存储图片到SQL SERVER数据库中

为了能存储到表中,你首先要上传它们到你的Web 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。将你的 encType 属性设置为:myltipart/formdata.

Stream imgdatastream  =  File1.PostedFile.InputStream;
int  imgdatalen  =  File1.PostedFile.ContentLength;
string  imgtype  =  File1.PostedFile.ContentType;
string  imgtitle  =  TextBox1.Text;
byte [] imgdata  =   new   byte [imgdatalen];
int  n  =  imgdatastream.Read(imgdata, 0 ,imgdatalen);
string  connstr = ((NameValueCollection)Context.GetConfig( " appSettings " ))[ " connstr " ];
SqlConnection connection 
=   new  SqlConnection(connstr);
SqlCommand command 
=   new  SqlCommand
 (
" INSERT INTO ImageStore(imgtitle,imgtype,imgdata)
 VALUES ( @imgtitle, @imgtype,@imgdata ) " , connection );
SqlParameter paramTitle  =   new  SqlParameter
 (
" @imgtitle " , SqlDbType.VarChar, 50  );
paramTitle.Value 
=  imgtitle;
command.Parameters.Add( paramTitle);
SqlParameter paramData 
=   new  SqlParameter(  " @imgdata " , SqlDbType.Image );
paramData.Value 
=  imgdata;
command.Parameters.Add( paramData );
SqlParameter paramType 
=   new  SqlParameter(  " @imgtype " , SqlDbType.VarChar, 50  );
paramType.Value 
=  imgtype;
command.Parameters.Add( paramType );
 
connection.Open();
int  numRowsAffected  =  command.ExecuteNonQuery();
connection.Close();

3、从数据库中恢复读取

现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。

private   void  Page_Load( object  sender, System.EventArgs e)
{
 
string  imgid  = Request.QueryString[ " imgid " ];
 
string  connstr = ((NameValueCollection)
 Context.GetConfig(
" appSettings " ))[ " connstr " ];
 
string  sql = " SELECT imgdata, imgtype FROM ImageStore WHERE id =  "   +  imgid;
 SqlConnection connection 
=   new  SqlConnection(connstr);
 SqlCommand command 
=   new  SqlCommand(sql, connection);
 connection.Open();
 SqlDataReader dr 
=  command.ExecuteReader();
 
if (dr.Read())
 {
  Response.ContentType 
=  dr[ " imgtype " ].ToString();
  Response.BinaryWrite( (
byte []) dr[ " imgdata " ] );
 }
 connection.Close();
}
  中国ASP.NET开发网整理,转载请注明出处。
 

你可能感兴趣的:(DotNET)