《ASP.NET实践教程(第2版)》采用C#语言作为ASP.NET Web应用程序的开发语言,以Visual Studio为开发平台,通过简单实用的实例全面介绍使用ASP.NET进行Web程序开发的常用技术。本书第1~7章主要介绍ASP.NET的基础知识、ASP.NET的内置对象、Web服务器控件、验证控件、网页布局技术、Web数据库编程基础等内容;第8~11章介绍网站设计中几个常用的功能模块,包括注册登录模块、在线投票模块、留言板模块、文件上传下载模块等;第12章介绍一个综合的ASP.NET应用开发案例。
本书可作为高等院校计算机相关专业的教材,也可供具有一定编程经验又需要迅速熟悉ASP.NET的读者参考,同时也适合自学ASP.NET的读者阅读。
《ASP.NET实践教程(第2版)》特点
1. 循序渐进,通俗易懂
本书所讲的内容避开了晦涩难懂的理论知识,但又覆盖了使用ASP.NET技术进行Web编程所需要的各方面的基础知识,并从基本操作开始,循序渐进地介绍了开发Web应用程序需要用到的基本技术。采用通俗易懂的语言,一步一步、手把手地教会您各种技术的使用,宛如现场专家言传身教。
2. 项目驱动,案例教学
本书不采用传统的\"以概念解释为主\"的方式,而采用\"以项目为驱动,实践为主\"的方式描述完成每一个任务的方法和步骤。每一个任务的提出,都伴随着一个完整的实例,读者通过完成此实例,就能掌握相关的基本概念和技术。
3. 步骤详细,图文并茂
本书在介绍ASP.NET的各项技术时,采用了项目实践的方式,且在讲解中步骤详细,图文并茂,读者只需要根据步骤一步步操作,边学边练,就可以掌握相关的技能,并从中找到学习ASP.NET的乐趣。
4. 结构合理,符合软件技术专业人才培养目标
作者在编写此书时充分考虑了现代教育的特点,旨在培养具有较高水平、较高素质的技能型人才。本书结构合理,能让读者轻松上手,快速掌握相关内容,全面提高学、练、用的能力。
在结构上,本书先用少量篇幅介绍了ASP.NET技术的语言基础,使读者在学习ASP.NET技术之前对相关知识有所了解。
在介绍ASP.NET技术时,作者并不急于解释相关概念,而是将这些技术融入一个个小案例中,使读者在实践中进行探索、分析和创新,从而掌握这些理论知识。同时介绍了目前网络比较流行的几个网站功能模块,读者只需要作少许的修改和扩展,便可应用于实际项目中。
前 言
一、关于ASP.NET
ASP.NET是微软公司推出的Web开发平台,是一种建立在公共语言运行库(Common Language Runtime,CLR)上的编程框架,可用于在服务器上开发功能强大的Web应用程序。它是目前技术最先进、特征最丰富、功能最强大的Web开发平台之一。ASP.NET自推出以来,具有开发效率高、使用简单快捷、管理更简单、全新的语言支持、安全性高等特点,是目前主流网络编程技术之一。
ASP.NET中内置了很多控件,在其他Web开发技术(如JSP)中需要费尽心思才能完成的功能,在ASP.NET中只需要简单地套用相应的内置控件即可完成。ASP.NET在数据库连接方面做了很大的改进,新增的DataSource控件和GridView控件使得数据库的操作更加简捷方便。
二、本书结构
本书在第1版的基础上,进行了如下改进:采用目前市场上较流行的开发工具版本,版本更高,提供的功能更多;增加了IIS(Internet Information Services,互联网信息服务)的安装过程,以及网站的发布与部署;增加了DIV+CSS布局基础知识,使得页面的设计更轻松、美观;将第1版中第5章页面结构与配置文件的内容分散到其他章节,并删除了一些冗余的段落和文字;在第1章至第6章中,增加了多个实战案例,便于在学习基础知识的同时,掌握案例的设计与应用;在第7章中,增加了程序的调试过程,使读者能更清晰地看到各个数据的变化过程;补全了第12章中其他所有功能的设计与实现,使之成为一个功能齐全的Web应用程序;修正了第1版中部分程序源码的笔误,确保程序的正确性和可行性。
本书内容由浅入深,首先介绍ASP.NET编程必须掌握的基本技术,并安排了对该章知识点综合应用的实战案例,非常适合初学者入门学习;然后介绍实际开发中常用的模块,这部分内容适合初、中级读者学习编程技术;最后通过一个综合实例讲解实际项目的开发过程,其目的是快速提高读者的实战编程能力。
各章的主要内容简述如下。
第1章介绍网站发展历史、.NET框架、Visual Studio开发环境、创建第一个ASP.NET程序、aspx文件和aspx.cs文件,以及发布和部署网站等内容。
第2章介绍ASP.NET语言基础,包括C#语言基础、XHTML标记语言、CSS简介、DIV+CSS布局等内容。
第3章介绍ASP.NET内置对象,包括Page对象、Response对象、Request对象、Server对象、Application对象、Session对象和Cookie对象等内容。
第4章介绍Web服务器控件,包括基本控件、选择控件、列表控件和高级控件等内容。
第5章介绍验证控件的使用方法。
第6章介绍常用的网页布局技术,包括ASP.NET用户控件、母版页和内容页,以及导航控件等内容。
第7章介绍Web数据库编程基础,包括SQL语言,ADO.NET概述,Connection对象,Command对象,DataReader对象,DataAdapter对象,DataSet对象,插入、编辑、删除数据,数据绑定,数据控件,配置文件Web.config,以及程序调试等内容。
第8章介绍开发Web应用程序常用的模块--注册登录模块,并详细介绍验证码生成的过程。
第9章介绍开发Web应用程序常用的模块--在线投票模块,并详细介绍XML文档的使用,以及以图片形式显示结果的过程。
第10章介绍开发Web应用程序常用的模块--留言板模块,并详细介绍留言板的制作过程,为后面论坛系统的制作奠定基础。
第11章介绍开发Web应用程序常用的模块--文件上传下载模块,并详细介绍数据库保存图片数据的过程。
第12章介绍使用Visual Studio与SQL Server设计一个完整的实例--BBS论坛系统,详细讲解一个项目的开发过程,使读者对Web应用程序的开发有一个较系统的理解。
三、本书特点
1. 循序渐进,通俗易懂
本书所讲的内容避开了晦涩难懂的理论知识,但又覆盖了使用ASP.NET技术进行Web编程所需要的各方面的基础知识,并从基本操作开始,循序渐进地介绍了开发Web应用程序需要用到的基本技术。采用通俗易懂的语言,一步一步、手把手地教会您各种技术的使用,宛如现场专家言传身教。
2. 项目驱动,案例教学
本书不采用传统的\"以概念解释为主\"的方式,而采用\"以项目为驱动,实践为主\"的方式描述完成每一个任务的方法和步骤。每一个任务的提出,都伴随着一个完整的实例,读者通过完成此实例,就能掌握相关的基本概念和技术。
3. 步骤详细,图文并茂
本书在介绍ASP.NET的各项技术时,采用了项目实践的方式,且在讲解中步骤详细,图文并茂,读者只需要根据步骤一步步操作,边学边练,就可以掌握相关的技能,并从中找到学习ASP.NET的乐趣。
4. 结构合理,符合软件技术专业人才培养目标
作者在编写此书时充分考虑了现代教育的特点,旨在培养具有较高水平、较高素质的技能型人才。本书结构合理,能让读者轻松上手,快速掌握相关内容,全面提高学、练、用的能力。
在结构上,本书先用少量篇幅介绍了ASP.NET技术的语言基础,使读者在学习ASP.NET技术之前对相关知识有所了解。
在介绍ASP.NET技术时,作者并不急于解释相关概念,而是将这些技术融入一个个小案例中,使读者在实践中进行探索、分析和创新,从而掌握这些理论知识。同时介绍了目前网络比较流行的几个网站功能模块,读者只需要作少许的修改和扩展,便可应用于实际项目中。
通过对本书的阅读,读者应能达到如下能力目标。
(1) 对简单网站进行设计、编辑、调试、运行的能力。
(2) 对ASP.NET各类控件的使用能力。
(3) 对网站数据库进行管理和维护的能力。
(4) 应用所学知识开发三层架构应用程序的能力。
四、本书适用对象
本书可作为高等院校计算机相关专业的教材,也可供具有一定编程经验又需要迅速熟悉ASP.NET的读者参考,同时也适合自学ASP.NET的读者阅读。
本书由年轻而富有经验的.NET软件技术研究小组组织编写,由魏菊霞任主编,李志中、谢云任副主编,相信本书能够为读者顺利进入ASP.NET编程世界提供帮助。
本书的编写得到了学院领导的大力支持,在此表示衷心的感谢。
尽管作者已经尽了各种努力来保证语言和代码中不出现错误,但由于编写时间仓促,水平有限,书中疏漏和不足之处在所难免,恳请各位读者和专家批评指正,提出宝贵意见和建议。
编 者
第1章 新手入门 1
1.1 网站发展历史 1
1.2 .NET框架 5
1.3 Visual Studio开发环境 6
1.4 创建第一个ASP.NET应用程序 12
1.5 aspx文件和aspx.cs文件 16
1.6 发布和部署网站 20
小结 25
习题 25
第2章 ASP.NET语言基础 27
2.1 C#语言基础 27
2.2 XHTML标记语言 38
2.3 CSS简介 42
2.4 DIV+CSS布局 45
2.5 实战:猜数游戏 50
小结 59
习题 59
第3章 ASP.NET内置对象 62
3.1 ASP.NET 内置对象概述 62
3.2 Page对象 62
3.3 Response对象 67
3.4 Request对象 71
3.5 Server对象 76
3.6 Application对象 79
3.7 Session对象 81
3.8 Cookie对象 84
3.9 实战1:统计网站在线人数 85
3.10 实战2:用户登录 87
小结 90
习题 90
第4章 Web服务器控件 92
4.1 HTML标记、HTML控件和
Web控件 92
4.2 HTML控件概述 94
4.3 Web控件概述 96
4.4 基本控件 97
4.5 选择控件 100
4.6 列表控件 105
4.7 高级控件 110
4.8 实战:用户注册页面 121
小结 129
习题 129
第5章 验证控件 131
5.1 验证控件概述 131
5.2 RequiredFieldValidator控件的功能
和使用 132
5.3 CompareValidator控件的功能
和使用 134
5.4 RangeValidator控件的功能
和使用 136
5.5 RegularExpressionValidator控件的
功能和使用 138
5.6 CustomValidator控件的功能
和使用 140
5.7 ValidatorSummary控件的功能
和使用 141
小结 143
习题 143
第6章 网页布局技术 145
6.1 ASP.NET用户控件 145
6.2 母版页和内容页 150
6.3 导航控件 154
小结 157
习题 157
第7章 Web数据库编程基础 159
7.1 SQL语言 159
7.2 ADO.NET概述 164
7.3 Connection对象 165
7.4 Command对象 167
7.5 DataReader对象 168
7.6 DataAdapter对象和DataSet对象 171
7.7 插入、编辑和删除数据 175
7.8 数据绑定 182
7.9 数据控件 184
7.10 配置文件Web.config 206
7.11 程序调试 209
小结 212
习题 212
第8章 注册登录模块 214
8.1 设计思想 214
8.2 ASP.NET的图像处理 215
8.3 注册登录模块的实现过程 218
小结 234
习题 234
第9章 在线投票模块 236
9.1 XML文档 236
9.2 在线投票模块设计思想 245
9.3 在线投票模块的实现 245
小结 252
习题 252
第10章 留言板模块 254
10.1 留言板模块设计思想 254
10.2 数据库设计 255
10.3 留言板模块的实现 256
小结 277
习题 277
第11章 文件上传下载模块 279
11.1 文件上传下载的设计思想 279
11.2 设计前的准备 280
11.3 上传文件至服务器 282
11.4 从服务器下载文件 285
11.5 上传图片至数据库 287
小结 296
习题 296
第12章 BBS论坛系统 298
12.1 设计思路 298
12.2 设计前的准备 299
12.3 数据库设计 303
12.4 设计实体(Model)层 305
12.5 设计数据访问(DAL)层 311
12.6 设计业务逻辑(BLL)层 331
12.7 主要功能界面(Web UI层)的实现 333
小结 365
习题 365
参考文献 367
第3章 ASP.NET内置对象
本章将详细介绍ASP.NET的常用内置对象,主要包括Page对象、Response对象、Request对象、Server对象、Application对象等。这些对象是用.NET框架中封装好的类来实现的,在ASP.NET页面初始化时,这些对象就已经自动创建了,故在程序中可以直接使用,不需要再实例化。这些内置对象为Web编程提供了丰富的功能,本章将重点介绍这些内置对象的主要用途和使用方法。
本章学习目标:
* 了解ASP.NET内置对象的种类。
* 掌握各种内置对象的属性和方法,以及在实际编程中的主要用途。
3.1 ASP.NET 内置对象概述
ASP.NET包括Page、Response、Request、Application、Server、Session、Cookies 等多个内置对象,每个对象都有自己的属性、方法和事件。
下面简单介绍这些内置对象的功能,如表3-1所示。
表3-1 ASP.NET的内置对象及其功能
对 象 名
功能说明
Page对象
用来设置与网页有关的属性、方法和事件
Response对象
用来向浏览器或客户端输出信息
Request对象
用来获取从浏览器或客户端返回的信息
Application对象
用来共享多个用户的全局信息
Server对象
用来提供服务器端的一些属性和方法
Session对象
用来存储某些特定用户的共享信息
Cookies对象
用来设置或获取Cookie信息
3.2 Page 对 象
Page对象是由System.Web.UI命名空间中的Page类来实现的,当浏览器访问Web页面时,Web页面被编译成Page对象,缓存在服务器内存中。Page对象用来设置与当前网页有关的属性、方法和事件。其常用的属性、方法和事件如表3-2所示。
表3-2 Page对象常用的属性、方法和事件
名 称
功能说明
IsPostBack属性
获取一个值,该值用来判断该页是否是第一次被加载
IsVaid 属性
获取一个值,该值用来判断该页是否通过验证
Validators属性
获取请求的网页所包含的全部验证控件集合
DataBind方法
将数据源绑定到指定的服务器控件
Dispose方法
强制服务器控件在内存释放之前执行清理操作
FindControl方法
在页面上搜索指定的服务器控件
Init事件
设置页面或控件的初始值
Load事件
网页被加载时发生
Unload事件
关闭文件、释放对象等时触发
3.2.1 IsPostBack属性
IsPostBack属性经常用来判断网页是否是第一次访问,当获取的值为false时,表示当前页是首次加载或访问;当该值为true时则不是。从下面的【例3-1】中可以看出IsPostBack属性的用途。
3.2.2 Init事件
Init事件用来设置页面或控件的初始值,当ASP.NET页面第一次被访问时,将触发Page对象的Init事件,对应的事件处理方法为Page_Init(),同一个页面只会被触发一次Init事件。
3.2.3 Load事件
Load事件又称加载或载入事件,当对象的相关数据装载到内存中时触发该事件。即当页面被加载时,就会触发Page对象的Load事件。Load事件也可用来设置页面或者控件的初始值,它与Init事件的主要区别在于:每次加载该页面时,都会触发其Load事件,因此一个页面的Load事件可能被触发多次,而Init事件只会在页面第一次被访问时触发一次。
下面通过一个实例来介绍Page对象的这些属性和事件的用途。
【例3-1】 设计一个下拉列表框(由DropDownList控件实现),下拉列表框中有一些可选的城市,当单击【提交】按钮时,将向下拉列表框中添加用户输入的城市。具体操作步骤如下。
(1) 打开Visual Studio开发工具, 新建一个网站ch03,在解决方案资源管理器中,右击站点文件,在弹出的快捷菜单中选择【添加新项】命令,添加一个新的Web窗体,命名为eg03_1.aspx。
(2) 打开【设计】窗口,在【表】菜单中选择【插入表】命令,在【插入表格】对话框中设置行数、列数等参数,设置好参数后,单击【确定】按钮添加一个3行2列的表格,如图3-1所示。
图3-1 设置插入表格参数
(3) 选中表格的第一行,单击鼠标右键,在弹出的快捷菜单中选择【修改】|【合并单元格】命令,并输入\"输入要添加的城市:\",打开工具箱,在表格的第二行添加1个TextBox控件、1个Button按钮,第三行添加1个DropDownList控件,各控件的id属性为默认值,设计界面如图3-2所示(本章节添加的所有控件的具体内容将在第4章中进行介绍)。
图3-2 设计界面
(4) 双击eg3_1.aspx页面的空白位置,打开eg3_1.aspx.cs文件,在Page对象的Load事件中添加的处理代码如下。
protected void Page_Load(object sender, EventArgs e)
{
//往下拉列表框中添加值
DropDownList1.Items.Add(\"广州\");
DropDownList1.Items.Add(\"佛山\");
DropDownList1.Items.Add(\"深圳\");
DropDownList1.Items.Add(\"东莞\");
}
这段代码表示当页面第一次被加载时,下拉列表框中将添加4个选项,分别是\"广州\"\"佛山\"\"深圳\"\"东莞\"。
(5) 切换到设计页面eg3_1.aspx,双击【添加】按钮,添加Click事件的处理代码如下。
protected void Button1_Click(object sender, EventArgs e)
{
//将输入文本框的值添加到下拉列表框中
DropDownList1.Items.Add(TextBox1.Text);
}
(6) 保存文件,运行程序,进入如图3-3所示的界面。
图3-3 运行界面(1)
(7) 在输入文本框中输入要添加的城市,如\"湛江\",单击【添加】按钮。查看下拉列表框中的选项,发现除了刚才添加的城市\"湛江\"外,之前的4个选项又重复添加了一次,如图3-4所示。
图3-4 运行界面(2)
这是因为当Web页面第一次执行时,触发了Page对象的Load事件,给下拉列表框添加了4个选项,当单击【提交】按钮时,Page对象的Load事件被再次触发,所以又重复地添加了这4个选项。
解决这个问题的方法一:在Page对象的Load()事件中,用IsPostBack属性来判断Web页面是否是第一次被加载,修改后的代码如下。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//往下拉列表框中添加值
DropDownList1.Items.Add(\"广州\");
DropDownList1.Items.Add(\"佛山\");
DropDownList1.Items.Add(\"深圳\");
DropDownList1.Items.Add(\"东莞\");
}
}
解决这个问题的方法二:将Load事件改为Init事件,问题也可以得到解决,因为Init事件对同一页面在初始化时只触发一次,当单击【添加】按钮时,Init事件将不再被触发。
……