第1章
ASP.NET的世界
众所周知,Internet已经渗入到人们生活的每一个角落,世界因Internet而变小。不知道从什么时候起,人们已经习惯了从网络中去了解、认识这个世界。很难想象,如果突然失去了网络,世界将会发生什么样的改变。
人们在学习一项新知识的时候,往往会为自己制定一个学习目标,而不是漫无目的地游走于知识的沙漠。在本书的学习过程中,笔者将陪伴读者一起从ASP.NET的基础出发,点点滴滴逐步积累,以构建一个基于ASP.NET Web技术的网上商店系统和一个基于ASP.NET MVC技术的网络博客系统作为本书ASP.NET之旅的目的地。通过这个边动手边学习的过程,读者将能熟练地掌握ASP.NET开发所需的基础知识,并能学会如何开发自己的Web应用程序。
要学习好一门软件开发技术或者语言,首先应该是对这门技术有一个总体的认识,知道它能做什么,然后才是怎么做的问题。因此,本章作为本书的第1章,将首先为读者介绍ASP.NET技术的发展情况,让读者对ASP.NET有一个总体的认识。通过阅读本章,读者还将了解到ASP. NET技术的设计目标,知道使用ASP.NET能够开发出什么样的软件系统,并将在本章的引导下亲自实现一个使用ASP.NET技术开发的“Hello World”Web应用程序。
接下来,就请读者跟随笔者一起漫游ASP.NET的世界,开始ASP.NET之旅。
1.1 ASP.NET的来世今生
小提示
“ASP.NET到底是什么?我能用它来做些什么的呢?它和以前的ASP之间有什么关系?……”
对于经常在网上购买书籍的读者,一定不会对“当当网”感到陌生,是的,“当当网”就是采用了ASP.NET技术开发构建的。当然,作为ASP.NET的创始者——Microsoft公司旗下的绝大多数网站也都是采用ASP.NET技术开发的。不仅如此,如今很多互联网网站以及面向企业的Web应用系统都采用了ASP.NET技术,ASP.NET已经成为Web开发领域中最为重要的力量之一,它最明显的标志就是Web页面的后缀名为aspx。同时,Microsoft公司为开发人员使用ASP.NET进行Web开发提供了大量的工具和技术支持,并且学习ASP.NET技术的门槛非常低,使得初学者能够很快地掌握基本的Web开发技术,使开发人员能够快速地、便捷地实施开发。有了Microsoft这个软件业界巨人的支持,以及我们身边很多成功实施的案例,无一不证明选择ASP.NET来进行Web开发的正确性。
在开始学习ASP.NET之前,读者还是需要对ASP.NET技术的发展过程有一个大概的了解。下面的两小节就会解开ASP.NET的身世之谜。
1.1.1 ASP.NET技术及其发展过程
ASP.NET是大名鼎鼎的Microsoft公司推出的一款以.NET Framework为基础平台的动态Web开发技术。Microsoft公司将传统的ASP(Active Server Pages)动态Web开发技术与.NET Framework相结合,使得开发人员能够快速、高效、敏捷地开发出可靠的Web应用程序。同时,ASP.NET也并不是ASP的简单升级,它使用.NET Framework中的各种服务器端编译型语言,例如C#,VB.NET等,并支持Web Form、.NET服务器控件、ADO.NET、LINQ等高级特性。随着Microsoft公司不断地对.NET 平台进行扩充和完善,如今的ASP.NET已成为Web开发领域最重要的服务器端平台技术之一。
一口气说了这么多,读者也许晕头转向、不甚明白。没关系,读者现在只需要知道ASP.NET是一项以.NET Framework为基础的Web开发技术就可以了,其余的内容就在本书的带领下,慢慢领会吧。
不用问,读者的下一个问题肯定是:什么是.NET Framework呢?
.NET Framework是Microsoft为开发应用程序而创建的富有革命性的新平台。.NET Framework可以创建Windows应用程序、Web应用程序(当然是指ASP.NET)、Web服务和其他各种类型的应用程序。
似乎越说越复杂了,那仍然请读者将这个概念暂时抛到一边,就记住开发ASP.NET要借助一个叫.NET Framework的东西吧,其他的还是交给本书后面的学习。
最新的.NET Framework版本是.NET Framework 4.0,Microsoft公司为它进一步改进和添加了控件,并新加入了LINQ技术、SEO(Search Engine Optimization,搜索引擎优化)和输出缓存等新功能,本书的介绍也将基于这个最新版本。
1.1.2 ASP.NET 设计目标
随着以Internet和局域网为代表的网络技术的不断发展,以B/S (Browser/Server) 模式架构的分布式应用逐步与C/S(Client/Server)模式架构并驾齐驱,并在系统应用中显示出了越来越重要的作用。另外,现在业界引起广泛讨论和关注的“云计算”概念的提出,使得Web开发,特别是Web 2.0进入了一个全新的时代。因此,不论是企业级的Web应用程序,还是各种类型网站的Web开发,已经成为了软件开发人员的一项重要工作和研究方向。正是在这样巨大的市场需求推动之下,.NET平台及其ASP.NET技术得到了长足的发展和广泛的应用。敏捷,是现代软件开发的新思想。所谓敏捷开发,就是以尽可能简单的方式,通过对团队有效的组织,以业务需求为驱动,尽早并持续性地交付有价值的软件让客户满意。ASP.NET的各个版本均是以简化开发人员的工作为设计目标的核心,并不断创新和丰富其自身内容,使开发人员能在最短的时间内开发出优秀的Web应用程序。作为最新版本的ASP.NET 4.0对以前版本做出了进一步的扩充,为开发人员提供了强大的功能。
ASP.NET将许多后台代码进行了封装,大大提高了开发效率,使开发人员可以将更多的注意力集中到业务逻辑的实现上去,改变了以前需要编写许多复杂的底层代码的状况。并且,随着.NET 平台和ASP.NET版本的不断更新,对项目和代码的管理维护工作也变得更加容易。
性能,是关系到一个项目成败的关键因素,Microsoft公司的技术人员通过优化.NET内部的处理机制,扩展高速缓存机制,并在.NET 2.0版本增加了对64位服务器的支持,充分提升了ASP.NET的性能,以适应企业级的需求。
总之,ASP.NET的设计目标就是为开发人员提供最为简化的开发技术和平台,为快速实现业务的开发提供支持。
休息一下
如果读者是一位软件开发的初学者,或许对以上提到的C/S模式、B/S模式、高速缓存机制等术语还不太熟悉,对ASP.NET和.NET也会感到很陌生。其实,这并没有关系,读者只需要对以上提到的内容有一个初步的印象就可以了。
回顾笔者学习软件开发的经历,在第一次接触到C++的时候,同样对宏、头文件、指针等概念一头雾水,当时只能将这些术语默默记在脑中,随着学习的深入和不断的探索、应用,回过头来再看到这些术语时,看似神秘的面纱已经不在了。
最开始学习编程的时候总是比较枯燥的,放松一下心情,窗外的阳光很灿烂。
1.2 ASP.NET的第一堂课
在对ASP.NET的发展过程和其设计目标有了初步认识之后,读者一定迫不急待想要亲自尝试一下,比如开发一个小小的ASP.NET程序。不过,在这之前,读者还需要先来认识一下开发ASP.NET Web应用程序会用到的一些常用控件,这些控件在今后的实际开发中会频繁用到。
1.2.1 ASP.NET控件概述
ASP.NET控件是一组可以复用的组件,.NET为我们提供了各种功能的控件。如图1-1所示,它们可以是呈现在浏览器端的Web页面元素,可以是诸如SqlDataSource,LinqDataSource等的数据访问控件,也可以是Web页面验证控件等。控件可以响应事件,获取或者设置属性,大多数控件都是在服务器端进行处理的。在此,首先介绍一下标准的服务器端Web控件。
图1-1 .NET功能控件
Web服务器控件主要有两种类型:标准的Web控件和HTML服务器控件。其中,HTML服务器控件是指添加了runat="server" 属性的HTML元素,例如<input runat="server"/>;而Web控件是指标记类似于<asp:button/>的Web服务器控件,本节主要介绍服务器端Web控件。
在一个Web页面中,按钮(Button)、下拉菜单(DropDownList)、文本框(TextBox)和图片(Image)是最为常见的元素。用户使用这些Web页面元素进行数据的读取、输入和事件的触发。在ASP.NET中,Visual Studio开发平台为用户提供了这些常用的Web控件,它们位于工具箱中,如图1-2所示。
图1-2 工具箱中的Web控件
读者可以用鼠标将工具栏中的控件拖放至设计窗口中,Visual Studio会自动生成相应的HTML标签。表1-1中列举了一些最常用、最简单的Web控件。
表1-1 常用的Web控件
控件有着各种属性,以Button控件的部分常用属性为例对其进行说明,如表1-2所示。
表1-2 Button控件的常用属性
控件除了上述介绍的属性以外,还包含了若干事件。开发人员定义事件和事件发生时所需执行的代码,然后通过委托机制和事件相绑定。至于什么是委托和事件,稍后为读者介绍。
小提示
■ 作为一名使用ASP.NET的Web开发人员,应该熟悉ASP.NET所提供的各个控件的功能和属性,尽管它们中的某些不是十分常用。
■ 开发人员也应该对HTML和JavaScript有充分的了解,因为它们会在开发过程中时常出现。
■ 开发人员应该了解并掌握ASP.NET各个控件的编译、运行状态,对于某些使用HTML客户端控件就能解决的问题,则不应该选用服务器端控件,以便减少服务器的压力。
1.2.2 Hello ASP.NET
读者一定是迫不及待地想要亲自编写一段ASP.NET应用程序了,下面就请读者一起来实现一个ASP.NET的“Hello ASP.NET”程序。在此之前,读者应当已经成功安装了Visual Studio 2010和.NET Framework 4.0,不熟悉具体安装过程的读者可以翻到第2章,先阅读安装的介绍。需要注意的是,本书的案例均是以中文版Visual Studio 2010 Team System作为开发平台的。
01 新建一个ASP.NET网站。在Visual Studio的菜单中选择“文件”→“新建”→“网站”命令,如图1-3所示。
图1-3 新建一个网站命令
02 在新弹出窗口中选择“ASP.NET网站”选项,并在位置文本框的创建路径中将“WebSite1”改为“HelloASP.NET”,语言选择“Visual C#”。表示要以.NET Framework 4.0为基础在对应文件系统路径下建立一个叫做“HelloASP.NET”的网站,最后单击“确定”按钮,如图1-4所示。
图1-4 新建一个网站
创建好网站之后,Visual Studio会在网站项目下自动生成一个名为Default.aspx的ASP.NET页面(ASP.NET页面总是以aspx为后缀名),一个Web.Config配置文件和一个App_Data文件夹。可以通过解决方案资源管理器(Solution Explorer)对项目文件进行查看,如图1-5所示。
图1-5 解决方案资源管理器
03 现在可以进行程序的开发了。Visual Studio 2010为用户提供了3种不同的视图,分别是“设计”、“拆分”和“源”,读者可以选中“拆分”选项卡,这样就可以同时呈现出页面设计和HTML源两个视图,方便开发人员对页面进行控制。然后,从工具栏中依次选择Label,TextBox和Button控件,拖放入“源”视图中的<div></div>标签内,Visual Studio会自动生成相应的代码,如图1-6所示。
图1-6 生成代码
在“源”视图中,可以清晰地看到上一小节介绍的控件及其属性。例如在Label控件中,其包含了ID属性,并将其设置为Label1,它表明这个Label控件的唯一身份;它还包含了runat属性,说明这个Label控件是一个服务器端的Web控件;最后Label在页面上默认的显示值是Label。
04 最后对这3个控件进行一个最简单的程序编写。这里要实现的功能就是在TextBox控件中输入“Hello ASP.NET”字符串,然后单击Button按钮,让Label控件显示为输入的值。当用户在页面中单击Button按钮时,会触发一个OnClick事件,然后执行相应的后台代码。下面就来示范如何实现这样一个功能。
双击“设计”视图里的Button按钮,Visual Studio会在后台CS文件里自动生成一个事件被触发时所执行的方法,用户对事件发生时所要做的操作就写在这个方法里。正如前面所述,当用户在TextBox控件中输入了值,后台程序则获取TextBox控件的文本,将文本赋值给Label控件并做为Label控件显示的值,代码清单如代码1-1所示:
//事件触发时执行方法 protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; }
代码1-1
05 最后来看看运行的效果,单击工具栏里的“调试”按钮,启动调试。注意,在第一次启动调试时,Visual Studio会弹出如图1-7所示的窗口,提示用户是否在配置文件Web.config里启动调试,这里单击“确定”按钮即可。
图1-7 进行调试
项目通过调试后,Visual Studio会启动浏览器,运行这个ASP.NET WebSite应用程序,结果如图1-8所示。
图1-8 在浏览器中显示应用程序
读者现在可以在TextBox控件中输入“Hello ASP.NET”,单击Button按钮,看看Label控件显示的是什么,最终执行效果如图1-9所示。
图1-9 最终执行效果
怎么样?如此简单的一行代码就可以实现前面所描述的需求。是的,ASP.NET就是这么简单!
1.3 伴您成长
1.3.1 您从本章学到了什么
通过本章的学习,读者了解了.NET和ASP.NET技术的发展过程,知道了ASP.NET技术的设计目标,初步认识了简单的Web服务器控件,并亲自实现了一个Hello ASP.NET Web应用程序,对ASP.NET有了一个初步的印象。
正如本章所述,使用ASP.NET就是为了快速、高效、敏捷地开发出Web应用程序。与此同时,作为一个专业的Web开发人员,读者需要掌握的知识还有很多,比如:HTML、CSS、JavaScript、C#服务器端编程技术、数据库技术等,本章所讲述的只是万里长征的第一步。
1.3.2 蛋糕加点奶油,咖啡加点糖
在结束本章之前,笔者再来谈谈ASP.NET的控件。
在1.2.1节中,读者仅认识了几个最基本的Web控件,现在就来进一步对控件进行了解。正如本章所述,控件是一组可以复用的组件,而组件是一个自包含的功能单元,拥有独立于内部结构的外部接口,或者可以认为,控件是一组被封装好的黑盒代码,并能按照需求被重复应用于任意多个应用程序中。
在.NET 中,控件是非常重要的一个概念,.NET不仅仅为开发人员提供了许多内置的服务器控件,还允许开发人员根据自己的具体需求,制定用户控件。关于用户控件,可以将它理解为一个开发人员自定义、封装好的Web窗体,并将该Web窗体用一个后缀名为ascx的文件和对应的CS文件存储起来。用户控件不能作为一个单独的Web窗体来运行,而是将其放入其他的Web窗体来使用,这样就可以实现代码的重用。下面我们就来实现一个简单的用户控件。
首先,打开前面已经建立好的HelloASP.NET项目,右击解决方案资源管理器中的项目,单击“添加新项”选项,在弹出窗口中单击“Web 用户控件”选项,然后单击“添加”按钮。当然,开发人员也可以为用户控件重命名,但在这里,先使用默认的“WebUserControl.ascx”,如图1-10所示。解决方案资源管理器中会自动生成WebUserControl.ascx和WebUserControl.ascx.cs文件。从工具箱中选择一个Label控件,拖放入WebUserControl.ascx的“源”视图中,更改Label控件的Text属性为“我是用户控件”,并保存。
图1-10 添加新控件
更改当前窗口到Default.aspx的“设计”视图,将刚刚建立的用户控件拖放入页面中,读者可以在“源”视图中看到对用户控件的引用和使用情况,代码清单如代码1-2所示:
<%--对用户控件的引用--%> <%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>
<%-- 用户自定义控件--%> <uc1:WebUserControl ID="WebUserControl1" runat="server" />
代码1-2
编译并运行该窗体,可以得到最终的实现效果,如图1-11所示,这就是一个简单的用户控件的实现。
图1-11 实现用户控件
1.3.3 下一步做什么
讲了这么多,读者是否已经感觉到ASP.NET应用程序的开发并不是一件非常复杂的事情?有些性急的读者也许已经急不可耐,想马上进入网上商店站点的开发之中。但是,正如前面所说,ASP.NET是基于.NET Framework的,因此,接下来还应该回归到.NET,只要认真学完本书讲述的这一点C#语言的基础,今后的开发就会得心应手。
休息一下
在进入下一章之前,读者应当去放松一下,看看其他的书籍,踢一场足球,或者出去和朋友们坐坐、聊天,谈谈今天学习到的ASP.NET,没准他们会认为你很在行,Good luck。
有志向的朋友还可以看看人格心理方面的书,因为软件开发的过程中需要和项目团队成员进行交流,知己知彼,方能百战不殆。
总之,笔者推荐读者以劳逸结合的方式来学习本书。