怎样利用向一个ASP网页中的提交数据--即模拟表单发送的效果?

梦想成了相扑 2003-10-17 09:45:45
【yunfeng007(一水寒)】给过一种方法--vb调用winInet API接口post数据到指定的url,但小弟没有用明白啊:

''This module is called modWinInet.bas. Use the SplitAddr() function to get the address in the correct format for PostInfo.

Option Explicit

''Author: Sam Huggill
''Email: sam@vbsquare.com

Private Declare Function InternetOpen Lib "wininet.dll" _
Alias "InternetOpenA" _
(ByVal lpszCallerName As String, _
ByVal dwAccessType As Long, _
ByVal lpszProxyName As String, _
ByVal lpszProxyBypass As String, _
ByVal dwFlags As Long) As Long

Private Declare Function InternetConnect Lib "wininet.dll" _
Alias "InternetConnectA" _
(ByVal hInternetSession As Long, _
ByVal lpszServerName As String, _
ByVal nProxyPort As Integer, _
ByVal lpszUsername As String, _
ByVal lpszPassword As String, _
ByVal dwService As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long

Private Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, _
ByVal sBuffer As String, _
ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer

Private Declare Function HttpOpenRequest Lib "wininet.dll" _
Alias "HttpOpenRequestA" _
(ByVal hInternetSession As Long, _
ByVal lpszVerb As String, _
ByVal lpszObjectName As String, _
ByVal lpszVersion As String, _
ByVal lpszReferer As String, _
ByVal lpszAcceptTypes As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long

Private Declare Function HttpSendRequest Lib "wininet.dll" _
Alias "HttpSendRequestA" _
(ByVal hHttpRequest As Long, _
ByVal sHeaders As String, _
ByVal lHeadersLength As Long, _
ByVal sOptional As String, _
ByVal lOptionalLength As Long) As Boolean

Private Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInternetHandle As Long) As Boolean

Private Declare Function HttpAddRequestHeaders Lib "wininet.dll" _
Alias "HttpAddRequestHeadersA" _
(ByVal hHttpRequest As Long, _
ByVal sHeaders As String, _
ByVal lHeadersLength As Long, _
ByVal lModifiers As Long) As Integer


Public Function PostInfo$(srv$, port$, script$, postdat$)

Dim hInternetOpen As Long
Dim hInternetConnect As Long
Dim hHttpOpenRequest As Long
Dim bRet As Boolean

hInternetOpen = 0
hInternetConnect = 0
hHttpOpenRequest = 0

''Use registry access settings.
Const INTERNET_OPEN_TYPE_PRECONFIG = 0
hInternetOpen = InternetOpen("http generic", _
INTERNET_OPEN_TYPE_PRECONFIG, _
vbNullString, _
vbNullString, _
0)

If hInternetOpen <> 0 Then
''Type of service to access.
Const INTERNET_SERVICE_HTTP = 3
Const INTERNET_DEFAULT_HTTP_PORT = 80
''Change the server to your server name
hInternetConnect = InternetConnect(hInternetOpen, _
srv$, _
port$, _
vbNullString, _
"HTTP/1.0", _
INTERNET_SERVICE_HTTP, _
0, _
0)

If hInternetConnect <> 0 Then
''Brings the data across the wire even if it locally cached.
Const INTERNET_FLAG_RELOAD = &H80000000
hHttpOpenRequest = HttpOpenRequest(hInternetConnect, _
"POST", _
script$, _
"HTTP/1.0", _
vbNullString, _
0, _
INTERNET_FLAG_RELOAD, _
0)

If hHttpOpenRequest <> 0 Then
Dim sHeader As String
Const HTTP_ADDREQ_FLAG_ADD = &H20000000
Const HTTP_ADDREQ_FLAG_REPLACE = &H80000000
sHeader = "Content-Type: application/x-www-form-urlencoded" _
& vbCrLf
bRet = HttpAddRequestHeaders(hHttpOpenRequest, _
sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE _
Or HTTP_ADDREQ_FLAG_ADD)

Dim lpszPostData As String
Dim lPostDataLen As Long

lpszPostData = postdat$
lPostDataLen = Len(lpszPostData)
bRet = HttpSendRequest(hHttpOpenRequest, _
vbNullString, _
0, _
lpszPostData, _
lPostDataLen)

Dim bDoLoop As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bDoLoop = InternetReadFile(hHttpOpenRequest, _
sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & _
Left(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
PostInfo = sBuffer
bRet = InternetCloseHandle(hHttpOpenRequest)
End If
bRet = InternetCloseHandle(hInternetConnect)
End If
bRet = InternetCloseHandle(hInternetOpen)
End If
End Function

Public Sub SplitAddr(ByVal addr$, srv$, script$)
''Inputs: The full url including http://
'' Two variables that will be changed
''
''Returns: Splits the addr$ var into the server name
'' and the script path

Dim i%

i = InStr(addr$, "/")
srv$ = Mid(addr$, i + 2, Len(addr$) - (i + 1))
i = InStr(srv$, "/")
script$ = Mid(srv$, i, Len(srv$) + 1 - i)
srv$ = Left$(srv$, i - 1)

End Sub
...全文
114 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦想成了相扑 2003-10-19
  • 打赏
  • 举报
回复
问题解决!!果然高人不多言。只言片语让我茅塞顿开!!
谢谢,接分!!

另:http://bbs.ecust.edu.cn/cgi-bin/bbs/bbstcon?board=Programer&file=M.1050763165.A有一个例子。
imur 2003-10-19
  • 打赏
  • 举报
回复
up
梦想成了相扑 2003-10-19
  • 打赏
  • 举报
回复
TO hhjjhjhj(大头):
能否详细说明?vTag是什么东东?

看来这个问题回答的人不多啊,这样正好,问题解决立马奉上100大分!!
梦想成了相扑 2003-10-18
  • 打赏
  • 举报
回复
TO hhjjhjhj(大头):
兄台给出的方法是在地址中加入QueryString,即表单发送的GET方法。可小弟要的是POST方法啊。
共同学习!!
hhjjhjhj 2003-10-18
  • 打赏
  • 举报
回复
请看看里面的代码
vTag.Value = k '向网页表单填数据
vTag.Click '模仿点击submit按扭
这样的操作应该可用于POST方法
hhjjhjhj 2003-10-17
  • 打赏
  • 举报
回复
这里有个实例
http://office.9zp.com/dispbbs.asp?boardID=15&replyID=1828&ID=14&skin=1
第4章 ASP.NET的网页代码模型及生命周期 从本章开始,就进入了ASP.NET应用程序开发的世界。在了解了C#的结构,以及面向对象的概念后,就可以从面向对象的思想开发ASP.NET应用程序。在ASP.NET,能够使用面向对象的思想和软件开发的一些思想,例如封装、派生、继承以及高级的设计模式等。本章首先介绍ASP.NET最重要的概念---网页代码模型。 4.1 ASP.NET的网页代码模型 在ASP.NET应用程序开发,微软提供了大量的控件,这些控件能够方便用户的开发以及维护。这些控件具有很强的扩展能力,在开发过程无需自己手动编写。不仅如此,用户还能够创建自定义控件进行应用程序开发以扩展现有的服务器控件的功能。 4.1.1 创建ASP.NET网站 在ASP.NET,可以创建ASP.NET网站和ASP.NET应用程序,ASP.NET网站的网页元素包含可视元素和页面逻辑元素,并不包含designer.cs文件。而ASP.NET应用程序包含designer.cs文件。创建ASP.NET网站,首先需要创建网站,单击【文件】按钮,在下拉菜单选择【新建网站】选项,单击后会弹出对话框用于ASP.NET网站的创建,如图4-1所示。 图4-1 新建ASP.NET网站 在【位置】选项,旁边的【下拉菜单】可以按照开发的需求来写,一般选择文件系统,地址为本机的本地地址。语言为.NET网站使用的语言,如果选择Visual C#,则默认的开发语言为C#,否则为Visual Basic。创建了ASP.NET网站后,系统会自动创建一个代码隐藏页模型页面Default.aspx。ASP.NET网页一般由三部分组成,这三个部分如下所示。 q 可视元素:包括HTML,标记,服务器空间。 q 页面逻辑元素:包括事件处理程序和代码。 q designer.cs页文件:用来为页面的控件做初始化工作,一般只有ASP.NET应用程序(Web Application)才有。 ASP.NET页面包含两种代码模型,一种是单文件页模型,另一种是代码隐藏页模型。这两个模型的功能完全一样,都支持控件的拖拽,以及智能的代码生成。 4.1.2 单文件页模型 单文件页模型的所有代码,包括控件代码、事物处理代码以及HTML代码全都包含在.aspx文件。编程代码在script标签,并使用runat=“server”属性标记。创建一个单文件页模型,在【文件】按钮选择【新建文件】选项,在弹出对话框选择【Web窗体】或在右击当前项目,在下拉菜单选择【添加新建项】选项即可创建一个.aspx页面,如图4-2所示。 图4-2 创建单文件页模型 在创建时,去掉【将代码放在单独的文件】复选框的选择即可创建单文件页模型的ASP.NET文件。创建后文件会自动创建相应的HTML代码以便页面的初始化,示例代码如下所示。 <%@ Page Language=“C#” %> <script runat=“server”> 无标题页
编译并运行,即可看到一个空白的页面被运行了。ASP.NET单文件页模型在创建并生成时,开发人员编写的类将编译成程序集,并将该程序集加载到应用程序域,并对该页的类进行实例化后输出到浏览器。可以说,.aspx页面的代码也即将会生成一个类,并包含内部逻辑。在浏览器浏览该页面时,.aspx页面的类实例化并输出到浏览器,反馈给浏览者。ASP.NET单文件页模型运行示例图如图4-3所示。 图4-3 单文件页模型 4.1.3 代码隐藏页模型 代码隐藏页模型与单文件页模型不同的是,代码隐藏页模型将事物处理代码都存放在cs文件,当ASP.NET网页运行的时候,ASP.NET类生成时会先处理cs文件的代码,再处理.aspx页面的代码。这种过程被成为代码分离。 代码分离有一种好处,就是在.aspx页面,开发人员可以将页面直接作为样式来设计,即美工人员也可以设计.aspx页面,而.cs文件由程序员来完成事务处理。同时,将ASP.NET的页面样式代码和逻辑处理代码分离能够让维护变得简单,同时代码看上去也非常的优雅。在.aspx页面,代码隐藏页模型的.aspx页面代码基本上和单文件页模型的代码相同,不同的是在script标记的单文件页模型的代码默认被放在了同名的.cs文件,.aspx文件示例代码如下所示。 <%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“Default.aspx.cs” Inherits=“_Default” %> 无标题页
从上述代码可以看出,在头部声明的时候,单文件页模型只包含Language=“C#”,而代码隐藏页模型包含了CodeFile=“Default.aspx.cs”,说明被分离出去处理事物的代码被定义在Default.aspx.cs,示例代码如下所示。 using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; //使用HtmlControls using System.Web.UI.WebControls; //使用WebControls using System.Web.UI.WebControls.WebParts; //使用WebParts public partial class _Default : System.Web.UI.Page //继承自System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } } 上述代码为Default.apx.cs页面代码。从上述代码可以看出,其格式与类库、编写类的格式相同,这也说明了.aspx页面允许使用面向对象的特性,如多态、继承等。但是ASP.NET代码隐藏页模型的运行过程比单文件页模型要复杂,运行示例图如图4-4所示。 图4-4 代码隐藏页模型 上述描述了代码隐藏类模型的页面生成模型。当页面被呈现之前,ASP.NET应用程序会解释并编译相应的cs文件的代码,与此同时,ASP.NET应用程序还会将.aspx页面进行编译并生成.aspx页面对应的类。生成.aspx页面对应的类后会将该类与cs文件的类进行协调生成新的类,该类会通过IIS在用户浏览页面时呈现在用户的浏览器。 4.1.4 创建ASP.NET Web Application ASP.NET网站有一种好处,就是在编译后,编译器将整个网站编译成一个DLL(动态链接库),在更新的时候,只需要更新编译后的DLL(动态链接库)文件即可。但是ASP.NET网站却有一个缺点,编译速度慢,并且类的检查不彻底。 相比之下,ASP.NET Web Application不仅加快了速度,只生成一个程序集,而且可以拆分成多个项目进行管理。创建Application,首先需要新建项目用于开发Web Application,单击菜单栏上的【文件】按钮,在下拉菜单选择【新建项目】选项,在弹出窗口选择【ASP.NET应用程序】选项,如图4-5所示。 图4-5 创建ASP.NET应用程序 在创建了ASP.NET应用程序后,系统同样会默认创建一个Default.aspx页面,不同的是,多出了一个Default.aspx.designer.cs,用来初始化页面控件,一般不需要修改。 4.1.5 ASP.NET网站和ASP.NET应用程序的区别 在ASP.NET,可以创建ASP.NET网站和ASP.NET应用程序,但是ASP.NET网站和ASP.NET应用程序开发过程和编译过程是有区别的。ASP.NET应用程序主要有以下特点: q 可以将ASP.NET应用程序拆分成多个项目以方便开发,管理和维护。 q 可以从项目和源代码管理排除一个文件或项目。 q 支持VSTS的Team Build方便每日构建。 q 可以对编译前后的名称,程序集等进行自定义。 q 对App_GlobalResources 的Resource强类支持。 ASP.NET WebSite编程模型具有以下特点: q 动态编译该页面,而不用编译整个站点。 q 当一部分页面出现错误不会影响到其他的页面或功能。 q 不需要项目文件,可以把一个目录当作一个Web应用来处理。 总体来说,ASP.NET网站适用于较小的网站开发,因为其动态编译的特点,无需整站编译。而ASP.NET应用程序适应大型的网站开发、维护等。 4.2 代码隐藏页模型的解释过程 在ASP.NET的代码隐藏页模型一个完整的.aspx页面包含两个页面,分别是以.aspx和.cs文件为后缀的文件,这两个文件在形成了整个Web窗体。在编译的过程都被编译成由项目生成的动态链接库(.DLL),同时,.aspx页面同样也会编译。但是与.cs页面编译过程不同的是,当浏览者第一次浏览到.aspx页面时,ASP.NET自动生成该页的.NET类文件,并将其编译成另一个.DLL文件。 当浏览者再一次浏览该页面的时候,生成的.DLL就会在服务器上运行,并响应用户在该页面上的请求或响应,ASP.NET应用程序的解释过程图如4-6所示。 图4-6 代码隐藏页模型页面的执行过程 在客户端浏览器访问该页面时,浏览器会给IIS发送请求消息,IIS则会开始执行ASP.NET编译过程,如果不存在编译过后的DLL文件,则加载编译的类并创建对象。当创建对象完成,生成创建对象后的代码并生成一个ASPX页面代码,该页面代码反馈给IIS,IIS再反馈成HTML页面的形式给客户端。 4.3 代码隐藏页模型的事件驱动处理 在传统的ASP开发ASP的事件都是按照网页的顺序来处理的,一般情况下,ASP页面的事件都是从上到下处理事件,可以说ASP的开发是一个线性的处理模型。在用户的浏览操作,每一次用户的操作都会导致页面重新被发送到服务器。因此,重复的操作必然导致客户端和服务器的往返过程,服务器必须重新创建页面,当创建页面后,服务器再按照原来的从上到下的顺序进行事件处理。 在ASP.NET,通过使用模拟事件驱动模型的行为代替了ASP的线性处理模型。ASP.NET页框架模型隐式的为用户建立了事件和事件处理程序的关联。ASP.NET让用户可以为从浏览器传递的事件在服务器代码设置相应的处理程序。假设某个用户正在浏览网站并与页面之间产生了某种交互,用户的操作就会引发事件,事件通过HTTP被传输到服务器。在服务器ASP.NET框架解释信息,并触发事件与之对应的处理程序。该程序可以是.aspx页面的处理程序,也可以是开发者自定义的类库,或者COM组件等。事件驱动处理如图4-7所示。 图4-7 页面框架的事件驱动处理模型 上图则说明了当一个浏览者通过浏览器触发ASPX页面时,浏览器、服务器和服务器返回页的过程。 4.4 ASP.NET客户端状态 Web开发不像软件开发,Web应用实际上是没有状态的,这就说明Web应用程序不自动指示序列的请求是否来自相同的浏览器或客户端,也无法判断浏览器是否一直在浏览一个页面或者一个站点,也无法判断用户执行了哪个操作并统计用户的喜好。 4.4.1 视图状态 从上面的章节可以知道,当服务器每次的往返过程,都将销毁页面并重新创建新的页面。如果一个页面的信息超出了页面的生命周期,那么这个页面的相关信息就不存在了。如果注销了页面的信息,那么用户的一些信息可能就不存在了。 在ASP.NET网页包含视图状态来保存用户的信息,视图状态在页面发回到自身时,跨页过程存储和用户自己的页面的特定值,视图状态的优点如下所示。 q 不需要任何服务器资源。 q 在默认情况下,对控件启用状态的数据进行维护,不会被破坏。 q 视图状态的值经过哈希运算和压缩保护,安全性更高。 视图状态同样有一些缺点,缺点如下所示。 q 视图状态会影响性能,如果页面存储较大较多的值,则性能会有较大的影响。 q 在手机,移动终端上,可能无法保存视图状态使用的值。 q 视图状态虽然安全性较高,但是还是有风险,如果直接查看页面代码,可以看到相应代码。 4.4.2 控件状态 ASP.NET还提供了控件状态属性作为在服务器往返过程存储自定义控件数据的方法。在页面控件,如果有多个自定义控件使用多个不同的控件来显示不同的数据结构,为了让这些页面控件能够在在页面上协调的工作,则需要使用控件状态来保护控件,同时,控件状态是不能被关闭的。同样,控件状态也有它的优点,优点如下所示。 q 与视图状态相同的是,不需要任何服务器资源。 q 控件状态是不能被关闭的,提供了控件管理的更加可靠的方法。 q 控件状态具有通用性。 4.4.3 隐藏域 在ASP,通常使用隐藏域保存页面的信息。在ASP.NET,同样具有隐藏域来保存页面的信息,作为维护页面状态的一种形式,但是隐藏域的安全性并不高,最好不要在隐藏域保存过多的信息。隐藏域具有以下优点。 q 不需要任何服务器资源。 q 支持广泛,任何客户端都支持隐藏域。 q 实现简单,隐藏域属于HTML控件,无需像服务器控件那样有需要编程知识。 而隐藏域具有一些不足,如下所示。 q 具有较高的安全隐患。 q 存储结构简单。 q 同样,如果存储了较多的较大的值,则会导致性能问题。 q 如果隐藏域过多,则在某些客户端被禁止。 q 隐藏域将数据存储在服务器上,而不存储在客户端。 注意:如果开发,页面的隐藏域过多,这些隐藏域被存储在服务器。当客户端浏览页面的时候,会有一些防火墙扫描页面,以保证操作系统的安全,如果页面的隐藏域过多,那么这些防火墙可能会禁止页面的某些功能。 4.4.4 Cookie Cookie在客户端用户保存网站的少量的用户信息,服务器可以通过编程的方法获取用户信息,Cookie信息和页面请求通常一起发送到服务器,服务器对客户端传递过来的Cookie信息做处理。通常Cookie保存用户的登录状态、用户名等基本信息等等,在后面的章节会详细介绍使用ASP.NET操作Cookies。 4.4.5 客户端状态维护 虽然使用某些客户端状态并不使用服务器资源,但是这些状态都具有潜在的安全隐患,如Cookie。非法用户可以使用Cookie欺骗来攻击网站进行用户信息的获取,不过使用客户端状态能够使用客户端的资源从而提高服务器性能。使用客户端状态,虽然有安全隐患,但是具有良好的编程能力,以及基本的安全知识,能够较好的解决安全问题,同时也能够提高服务器性能。下面小结了一些客户端状态的优缺点。 q 视图状态:推荐当存储少量挥发到自身的页面的信息时使用。 q 控件状态:不需要任何服务器资源,控件状态是不能被关闭的,提供了控件管理的更加可靠和更通用的方法。 q 隐藏域:实现简单,但是在应用程序会造成一些安全隐患。 q Cookie:实现简单,同样也能够简单的获取用户的信息,但是Cookie有大小的限制,不适宜存储大量的代码。 4.5 ASP.NET页面生命周期 ASP.NET页面运行时,也同类的对象一样,有自己的生命周期。ASP.NET页面运行时,ASP.NET页面将经历一个生命周期,在生命周期内,该页面将执行一系列的步骤,包括控件的初始化,控件的实例化,还原状态和维护状态等,以及通过IIS反馈给用户呈现成HTML。 ASP.NET页面生命周期是ASP.NET非常重要的概念,了解ASP.NET页面的生命周期,就能够在合适的生命周期内编写代码,执行事务。同样,熟练掌握ASP.NET页面的生命周期,可以开发高效的自定义控件。ASP.NET生命周期通常情况下需要经历几个阶段,这几个阶段如下所示。 q 页请求:页请求发生在页生命周期开始之前。当用户请求一个页面,ASP.NET将确定是否需要分析或者编译该页面,或者是否可以在不运行页的情况下直接请求缓存响应客户端。 q 开始:发生了请求后,页面就进入了开始阶段。在该阶段,页面将确定请求是发回请求还是新的客户端请求,并设置IsPostBack属性。 q 初始化:在页面开始后,进入了初始化阶段。初始化期间,页面可以使用服务器控件,并为每个服务器控件进行初始化。 q 加载:页面加载控件。 q 验证:调用所有的验证程序控件的Vailidate方法,来设置各个验证程序控件和页的属性。 q 回发事件:如果是回发请求,则调用所有事件处理的程序。 q 呈现:在呈现期间,视图状态被保存并呈现到页。 q 卸载:完全呈现页面后,将页面发送到客户端并准备丢弃时,将调用卸载。 4.6 ASP.NET生命周期的事件 在页面周期的每个阶段,页面将引发可运行用户代码进行处理事件。对于控件产生的事件,通过声明的方式执行代码,并将事件处理程序绑定到事件。不仅如此,事件还支持自动事件连接,最常用的就是Page_Load事件了,除了Page_Load事件以外,还有Page_Init等其他事件,本节将会介绍此类事件。 4.6.1 页面加载事件(Page_PreInit) 每当页面被发送到服务器时,页面就会重新被加载,启动Page_PreInit事件,执行Page_PreInit事件代码块。当需要对页面的控件进行初始化时,则需要使用此类事件,示例代码如下所示。 protected void Page_PreInit(object sender, EventArgs e) //Page_PreInit事件 { Label1.Text = “OK”; //标签赋值 } 在上述代码,当触发了Page_PreInit事件时,就会执行该事件的代码,上述代码将Lable1的初始文本值设置为“OK”。Page_PreInit事件能够让用户在页面处理,能够让服务器加载时只执行一次而当网页被返回给客户端时不被执行。在Page_PreInit可以使用IsPostBack来实现,当网页第一次加载时IsPostBack属性为false,当页面再次被加载时,IsPostBack属性将会被设置为true。IsPostBack属性的使用能够影响到应用程序的性能。 4.6.2 页面加载事件(Page_Init) Page_Init事件与Page_PreInit事件基本相同,区别在于Page_Init并不能保证完全加载各个控件。虽然在Page_Init事件,依旧可以访问页面的各个空间,但是当页面回送时,Page_Init依然执行所有的代码并且不能通过IsPostBack来执行某些代码,示例代码如下所示。 protected void Page_Init(object sender, EventArgs e) //Page_Init事件 { if (!IsPostBack) //判断是否第一次加载 { Label1.Text = “OK”; //将成功信息赋值给标签 } else { Label1.Text = “IsPostBack”; //将回传的值赋值给标签 } } 4.6.3 页面载入事件(Page_Load) 大多数初学者会认为Page_Load事件是当页面第一次访问触发的事件,其实不然,在ASP.NET页生命周期内,Page_Load远远不是第一次触发的事件,通常情况下,ASP.NET事件顺序如下所示。 q 1. Page_Init()。 q 2. Load ViewState。 q 3. Load Postback data。 q 4. Page_Load()。 q 5. Handle control events。 q 6. Page_PreRender()。 q 7. Page_Render()。 q 8. Unload event。 q 9. Dispose method called。 Page_Load事件是在网页加载的时候一定会被执行的事件。在Page_Load事件,一般都需要使用IsPostBack来判断用户是否进行了操作,因为IsPostBack指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) //Page_Load事件 { if (!IsPostBack) { Label1.Text = “OK”; //第一次执行的代码块 } else { Label1.Text = “IsPostBack”; //如果用户提交表单等 } } 上述代码使用了Page_Load事件,在页面被创建时,系统会自动在代码隐藏页模型的页面增加此方法。当用户执行了操作,页面响应了客户端回发,则IsPostBack为true,于是执行else的操作。 4.6.4 页面卸载事件(Page_Unload) 在页面被执行完毕后,可以通过Page_Unload事件用来执行页面卸载时的清除工作,当页面被卸载时,执行此事件。以下情况会触发Page_Unload事件。 q 页面被关闭。 q 数据库连接被关闭。 q 对象被关闭。 q 完成日志记录或者其他的程序请求。 4.6.5 页面指令 页面指令用来通知编译器在编译页面时做出的特殊处理。当编译器处理ASP.NET应用程序时,可以通过这些特殊指令要求编译器做特殊处理,例如缓存、使用命名空间等。当需要执行页面指令时,通常的做法是将页面指令包括在文件的头部,示例代码如下所示。 <%@ Page Language=“C#” AutoEventWireup=“true” CodeBehind=“Default.aspx.cs” Inherits=“MyWeb._Default” %> 上述代码,就使用了@Page页面指令来定义ASP.NET页面分析器和编译器使用的特定页的属性。当代码隐藏页模型的页面被创建时,系统会自动增加@Page页面指令。 ASP.NET页面支持多个页面指令,常用的页面指令如下所示。 q @ Page:定义ASP.NET页分析器和编译器使用的页特定(.aspx文件)属性,可以编写为<%@ Page attribute=“value” [attribute=“value”…]%>。 q @ Control:定义ASP.NET页分析器和编译器使用的用户控件(.ascx文件)特定的属性。该指令只能为用户控件配置。可以编写为<%@ Control attribute=“value” [attribute=“value”…]%>。 q @ Import:将命名空间显示导入到页,使所导入的命名空间的所有类和接口可用户该页。导入的命名空间可以是.NET Framework类库或用户定义的命名空间的一部分。可以编写为<%@ Import namespace=“value” %>。 q @ Implements:提示当前页或用户控件实现制定的.NET Framework接口。可以编写为<%@ Implements interface=“ValidInterfaceName” %>。 q @ Reference:以声明的方式指示,应该根据在其声明此指令的页对另一个用户控件或页源文件进行动态编译和链接。可以编写为<%@ Reference page | control=“pathtofile” %>。 q @ Output Cache:以声明的方式空间ASP.NET页或页包含的用户控件的输出缓存策略。可以编写为<%@ Output Cache Duration=“#ofseconds” Location=“Any | Client | Downstream | Server | None” Shared=“True |False” VaryByControl=“controlname” VaryByCustom=“browser | customstring” VaryByHeader=“headers” VaryByParam=“parametername” %> q @ Assembly:在编译过程将程序集链接到当前页,以使程序集的所有类和接口都可用在该页上。可以编写为<%@ Assembly Name=“assemblyname” %>或<%@ Assembly Src=“pathname” %>的方式。 q @ Register:将别名与命名空间以及类名关联起来,以便在自定义服务器控件语法使用简明的表示法。可以编写为<%@ Register tagprefix=“ tagprefix” Namespace=“namepace” Assembly=“assembly” %>或<%@ Register tagprefix=“ tagprefix” Tagname=“tagname” Src=“pathname” %>的方式。 4.7 ASP.NET网站文件类型 在ASP.NET包含诸多的文件类型,这些类型的文件由ASP.NET支持和管理,而除了这些文件以外,其他的文件都由IIS托管。使用VS2008能够创建大部分可以使用ASP.NET托管运行的程序。同时,使用应用程序映射可以将文件类型映射到应用程序。当需要伪静态时,很可能需要将.html后缀托管到IIS的应用扩展,因为默认情况下ASP.NET不会处理HTML的操作。 技巧:现在的网站构架,生成静态是一种降低网站压力的一种很好的解决方案。在某些情况下,服务器可能需要伪静态支持,就是将.aspx页面后缀显式成.html后缀,让搜索引擎能够更好的搜录。 1.ASP.NET管理的文件类型 ASP.NET管理的文件类型能够在ASP.NET应用程序ASP.NET应用程序的不同模块进行访问和调用,这些文件可能是用户能够直接访问的,也有可能是用户无法直接访问的。ASP.NET管理的文件类型如表4-1所示。 表4-1 ASP.NET管理的文件类型 文件类型 保存位置 描述 .asax 根目录。 Global.asax 文件。包含 HttpApplication 对象的派生代码,用于重新展示 Application 对象。 .ascx 根目录或子目录。 可重用的自定义 Web 控件。 .ashx 根目录或子目录。 处理器文件。包含实现 IHttpHandler 接口的代码,用于处理输入请求。 .asmx 根目录或子目录。 XML Web Services 文件。包含由 SOAP 提供给其他 Web 应用的类对象和功能。 .aspx 根目录或子目录。 ASP.NET Web 窗体。包含 Web 控件和其他业务逻辑。 .axd 根目录。 跟踪视图文件。通常是 Trace.axd。 .browser App_Browsers 目录。 浏览器定义文件。用于识别客户端浏览器的可用特征。 .cd 根目录或子目录。 类图文件。 .compile Bin 目录。 定位于适当汇编集的预编译文件。可执行文件(.aspx,.ascx,.master,theme)预编译后放在 Bin 目录。 .config 根目录或子目录。 Web.config 配置文件。包含用于配置 ASP.NET 若干特征的 XML 元素集。 .cs,.jsl,vb App_Code 目录。有些是 ASP.NET 的代码分离文件,位于与 Web 页面相同的目录。 运行时被编译的类对象源代码。类对象可以是 HTTP 模块,HTTP 处理器,或 ASP.NET 页面的代码分离文件。 .csproj,vbproj,vjsproj Visual Studio 工程目录。 Visual Studio 客户工程文件。 .disco,.vsdisco App_WebReferences 目录。 XML Web Services Discovery 文件。用于定位可用 Web Services。 .dsdgm,dsprototype 根目录或子目录。 分布式服务图表(DSD)文件。可添加到 Visual Studio 方案,为反向引擎提供消耗 Web Services 时的交互性图表。 .dll Bin 目录。 已编译类库文件。作为替代,可将类对象源代码保存到 App_Code 目录。 .licx,.webinfo 根目录或子目录。 许可协议文件。许可协议有助于保护控件开发者的知识产权,并对控件用户的使用权进行验证。 .master 根目录或子目录。 模板文件定义 Web 页面的统一布局,并在其他页面得到引用。 .mdb,.ldb App_Data 目录。 Access 数据库文件。 .mdf App_Data 目录。 SQLServer 数据库文件。 .msgx,.svc 根目录或子目录。 Indigo Messaging Framework(MFx)服务文件。 .rem 根目录或子目录。 远程处理器文件。 .resources App_GlobalResources 或 App_LocalResources 目录。 资源文件。包含图像,本地化文本,或其他数据的资源引用串。 .resx App_GlobalResources 或 App_LocalResources 目录。 资源文件。包含图像,本地化文本,或其他数据的资源引用串。 .sdm,.sdmDocument 根目录或子目录。 系统定义模型(SDM)文件。 .sitemap 根目录。 网站地图文件。包含网站的结构。ASP.NET 通过默认的网站地图提供者,简化导航控件对网站地图文件的使用。 .skin App_Themes 目录。 皮肤定义文件。用于确定显示格式。 .sln Visual Web Developer 工程目录。 Visual Web Developer 工程的项目文件。 .soap 根目录或子目录。 SOAP 扩展文件。 注意:ASP.NET 管理的文件类型映射到 IIS 的 Aspnet_isapi.dll。 2.IIS 管理的文件类型 在ASP.NET应用程序,有些动态的文件如asp文件就不被ASP.NET应用程序框架管理,这些文件由IIS进行管理,由IIS管理的文件类型如表4-2所示。 表4-2 IIS管理的文件类型 文件类型 保存位置 描述 .asa 根目录。 Global.asa 文件。包含 ASP 会话对象或应用程序对象生命周期的各种事件处理。 .asp 根目录或子目录. ASP Web 页面。包含 @ 指令和使用 ASP 内建对象的脚本代码。 .cdx App_Data 目录. Visual FoxPro 的混合索引文件。 .cer 根目录或子目录。 证明文件。用于对网站的授权。 .idc 根目录或子目录。 Internet Database Connector(IDC)文件。被映射到 httpodbc.dll。 注意:由于无法为数据库连接提供足够的安全性,IDC 将不再被继续使用。IIS 6.0 是最后一个支持 IDC 的版本。 .shtm,.shtml,.stm 根目录或子目录。 包含文件。被映射到 ssinc.dll。 注意:IIS管理的文件类型被映射到IIS的asp.dll 3.静态文件类型 IIS仅提供已注册MIME类型的静态文件服务,注册信息保存在Mime Map IIS元数据。如果某种文件类型已经映射到指定应用程序,在不需要作为静态文件的情况之下,无需再在MIME类型列表进行包含。默认的静态文件类型如表4-3所示。 表4-3 静态文件类型 文件类型 保存位置 描述 .css 根目录或子目录,以及 App_Themes 目录。 样式表文件。用于确定 HTML 元素的显示格式。 .htm,.html 根目录或子目录。 静态网页文件。由 HTML 代码编写。 注意:虽然ASP.NET的代码页面也能够手动添加到MIME类型列表,但是这样操作浏览者就能够看到页面源代码,从而暴露ASP.NET页面源代码,相对于服务器而言是非常不安全的。 4.8 小结 本章介绍了ASP.NET页面生命周期,以及ASP.NET页面的几种模型。ASP.NET页面生命周期是ASP.NET非常重要的概念,熟练掌握ASP.NET生命周期能对ASP.NET开发,自定义控件开发起到促进作用。本章还介绍了: q 代码隐藏页模型的解释过程。 q 代码隐藏页模型的事件驱动处理。 q ASP.NET网页的客户端状态。 q ASP.NET页面生命周期。 q ASP.NET生命周期的事件。 q ASP.NET 网站文件类型。 上面的章节都分开的讲解了ASP.NET运行的一些基本机制,在了解了这些基本运行机制后,就能够在.NET框架下做ASP.NET开发了。虽然这些都是基本概念,但是在今后的开发,会起到非常重要的作用。
ASP的最新版本ASP.NET是Microsoft用于建立动态的数据库驱动网站的技术。内容包括:ASP.NET Web表单的使用,高级ASP.NET页面的开发,ADO.NET的使用,ASP.NET应用程序的使用, ASP.NET应用程序的保护,ASP.NET Web服务的建立,.NET框架的利用,自定义的ASP.NET控件的建立,ASP.NET的应用程序示例等。
本书内容丰富、图文并茂,适合于需要创建网站的专业程序员阅读。本书是关于使用ASP.NET建立网站的完整参考书,书包含数百个代码示例,读者可以使用这些示例开始建立自己的网站
前言

第一部分 使用ASP.NET Web表单

第1章 建立ASP.NET页面

1.1 ASP.NET和.NET框架
1.1.1 .NET框架类库
1.1.2 理解名称空间
1.1.3 标准的ASP.NET名称空间
1.1.4 与.NET框架兼容的语言
1.2 ASP.NET控件简介
1.2.1 简单的ASP.NET页面
1.2.2 ASP.NET控件的优点
1.2.3 ASP.NET控件概述
1.3 向ASP.NET页面添加应用逻辑
1.3.1 处理控件事件
1.3.2 处理页面事件
1.4 ASP.NET页面的结构
1.4.1 指令
1.4.2 代码声明块
1.4.3 ASP.NET控件
1.4.4 代码显示块
1.4.5 服务器端注释
1.4.6 服务器端包含指令
1.4.7 文本和HTML标记
1.5 小结

第2章 用Web服务器控件建立表单

2.1 建立智能表单
2.1.1 Label控件
2.1.2 TextBox控件
2.1.3 Button控件
2.1.4 RadioButton和RadioButtonList控件
2.1.5 CheckBox和CheckBoxList控件
2.1.6 DropDownList控件
2.1.7 ListBox控件
2.2 控制页面导航
2.2.1 将表单提交到另一个页面
2.2.2 使用Redirect( )方法
2.2.3 使用HyperLink控件
2.3 在控件上进行格式化
2.3.1 基本Web控件属性
2.3.2 在Web控件上应用样式
2.4 小结

第3章 用检验控件执行表单的检验

3.1 使用客户端检验
3.1.1 配置客户端检验
3.1.2 启用和禁用客户端检验
3.2 必填域:RequiredFieldValidator控件
3.3 检验表达式:RegularExpressionValidator控件
3.3.1 检验电子邮件地址
3.3.2 检验用户名和口令
3.3.3 检验电话号码
3.3.4 检验网址
3.3.5 检验条目长度
3.3.6 检验邮政编码
3.4 比较值:CompareValidator控件
3.4.1 比较一个控件与另一个控件的值
3.4.2 比较一个控件的值与固定值
3.4.3 执行数据类型检查
3.5 检查值的范围:RangeValidator控件
3.6 错误汇总:ValidationSummary控件
3.7 执行自定义的检验:CustomValidator控件
3.8 禁用检验
3.9 小结

第4章 高级控件编程

4.1 使用视图状态
4.1.1 禁用视图状态
4.1.2 将值添加到视图状态
4.2 显示和隐藏内容
4.2.1 使用Visible和Enabled属性
4.2.2 使用Panel控件
4.2.3 模拟多页面表单
4.2.4 通过程序添加控件
4.2.5 将控件添加到页面
4.2.6 PlaceHolder控件
4.2.7 动态产生表单
4.2.8 动态产生列表条目
4.3 使用复杂控件
4.3.1 使用Calendar控件显示交互式的日历
4.3.2 使用AdRotator控件显示广告条
4.3.3 使用HTMLInputFile控件接受文件上传
4.4 小结

第二部分 高级ASP.NET页面开发

第5章 用用户控件创建自定义控件

5.1 用用户控件包含标准内容
5.2 显露用户控件的属性和方法
5.3 显露用户控件的Web控件
5.4 显露用户控件的事件
5.5 通过程序装载用户控件
5.6 小结

第6章 将代码与表示分离

6.1 创建业务组件
6.2 创建多层Web应用程序
6.3 使用code-behind
6.3.1 code-behind是如何工作的
6.3.2 编译code-behind文件
6.3.3 从一个code-behind文件派生多个页面
6.3.4 编译完整的ASP.NET页面
6.4 小结

第7章 用可移动控件为可移动设备服务

7.1 使用可移动设备软件模拟
7.2 无线应用协议简介
7.3 建立WML页面
7.3.1 配置IIS
7.3.2 WML和XML
7.3.3 创建卡片集
7.3.4 用WML链接文件
7.4 使用ASP.NET可移动控件
7.4.1 创建可移动表单
7.4.2 动态激活可移动表单
7.4.3 显示文本
7.4.4 显示列表
7.4.5 创建文本框
7.4.6 检验用户输入
7.4.7 显示图像
7.4.8 进行电话呼叫
7.4.9 用可移动控件显示广告
7.4.10 使用可移动控件显示日历
7.5 创建跨设备兼容的可移动页面
7.5.1 探测设备功能
7.5.2 使用DeviceSpecific选择设备
7.5.3 使用表单模板集
7.6 小结

第8章 使用第三方控件

8.1 使用Microsoft Internet Explorer WebControls
8.1.1 使用TreeView控件
8.1.2 使用Toolbar控件
8.1.3 使用TabStrip控件
8.2 使用Superexpert控件
8.2.1 使用Content Rotator控件
8.2.2 使用SuperDataGrid控件
8.2.3 使用DataForm控件
8.3 小结

第三部分 使用ADO.NET

第9章 ADO.NET简介

9.1 ADO.NET概述
9.2 执行常见的数据库任务
9.2.1 打开数据库链接
9.2.2 从数据库表获取记录
9.2.3 在查询使用参数
9.2.4 向数据库添加记录
9.2.5 更新数据库记录
9.2.6 删除数据库记录
9.3 改进数据库性能
9.3.1 使用SQL存储过程
9.3.2 获取返回值和输出参数
9.3.3 执行复杂的存储过程
9.3.4 用链接缓冲改进性能
9.4 高级的数据库主题
9.4.1 在事务执行数据库命令
9.4.2 指定命令行为
9.4.3 获取表模式信息
9.5 小结

第10章 将数据绑定到Web控件

10.1 数据绑定概述
10.2 将服务器控件绑定到数据
10.2.1 绑定到Repeater控件
10.2.2 使用模板
10.2.3 视图状态和Repeater控件
10.2.4 绑定到DropDownList控件
10.2.5 绑定到RadioButtonList控件
10.2.6 绑定到CheckBoxList控件
10.2.7 绑定到ListBox控件
10.2.8 绑定到其他控件
10.3 创建主/明细表单
10.3.1 创建单页面的主/明细表单
10.3.2 创建多页面的主/明细表单
10.4 小结

第11章 使用DataList和DataGrid控件

11.1 DataList和DataGrid控件概述
11.1.1 理解事件冒泡机制
11.1.2 使用模板
11.1.3 使用DataKeys集合
11.2 使用DataList控件
11.2.1 在DataList显示数据
11.2.2 对DataList使用模板
11.2.3 对DataList使用样式
11.2.4 在DataList创建多个列
11.2.5 捕获DataList控件引发的事件
11.2.6 选择DataList的条目
11.2.7 通过DataList控件使用DataKeys集合
11.2.8 用DataList控件创建主/明细表单
11.2.9 编辑DataList控件的条目
11.3 使用DataGrid控件
11.3.1 在DataGrid控件创建列
11.3.2 对DataGrid使用样式
11.3.3 对DataGrid控件的列进行排序
11.3.4 对DataGrid的记录进行分页
11.3.5 选择DataGrid控件的行
11.3.6 编辑DataGrid控件的条目
11.3.7 使用模板编辑DataGrid控件的条目
11.4 小结

第12章 操作DataSet

12.1 理解DataSet
12.1.1 DataSet的元素
12.1.2 向DataSet添加DataTable
12.1.3 将控件绑定到DataSet
12.2 理解DataTable
12.2.1 通过程序创建DataTable
12.2.2 设置DataTable属性
12.2.3 在DataTable设置列属性
12.2.4 在DataTable计算列值
12.2.5 在DataTable之间定义关系
12.2.6 获取DataTable模式信息
12.2.7 在DataTable更新记录
12.3 理解DataView
12.3.1 在DataView对行进行过滤
12.3.2 在DataView对行进行排序
12.3.3 在DataView搜索行
12.4 通过ASP.NET页面使用DataSet
12.4.1 缓存DataSet
12.4.2 显示缓存的数据
12.4.3 过滤缓存的数据
12.4.4 在缓存的DataSet搜索行
12.5 小结

第13章 操作XML

13.1 XML类概述
13.2 通过DataSet使用XML
13.2.1 将XML文档读入DataSet
13.2.2 通过ReadXml使用模式
13.2.3 从DataSet写XML文档
13.2.4 通过DataSet使用XMLData Documents
13.3 使用样式单转换XML
13.4 使用ASP.NET Xml控件
13.5 使用XslTransform类
13.6 使用强类型的DataSet
13.7 小结

第14章 使用ADO.NET创建搜索页面

14.1 使用SQL Server全文搜索
14.1.1 配置Full-Text Search Service
14.1.2 对数据数据执行任意文本查询
14.1.3 对数据数据执行布尔查询
14.1.4 上传二进制文档并且进行索引
14.2 使用Microsoft Indexing Service
14.2.1 配置Microsoft Indexing Service
14.2.2 将SQL Server配置为使用Microsoft Indexing Service
14.2.3 获取文档属性
14.2.4 对文件系统数据执行任意文本查询
14.2.5 对文件系统数据执行布尔查询
14.2.6 对文档属性执行查询
14.3 小结

第四部分 使用ASP.NET应用程序

第15章 创建ASP.NET应用程序

15.1 ASP.NET应用程序概述
15.2 使用应用程序状态
15.2.1 理解应用程序状态和同步
15.2.2 使用Global.asax文件
15.2.3 理解Context和使用Global.asax文件
15.2.4 处理应用程序Start和Init事件
15.2.5 处理Application_BeginRequest事件
15.3 使用Web.Config文件
15.3.1 研究配置部分
15.3.2 修改配置设置
15.3.3 设置配置位置
15.3.4 锁定配置设置
15.3.5 添加自定义的配置信息
15.4 使用HTTP处理器和模块
15.4.1 使用HTTP处理器
15.4.2 使用HTTP模块
15.4.3 创建WhosOn应用程序
15.5 小结

第16章 跟踪用户会话

16.1 使用浏览器cookie
16.1.1 cookie如何工作
16.1.2 创建和读取会话cookie
16.1.3 创建和读取持久性cookie
16.1.4 设置cookie属性
16.1.5 cookie的限制
16.2 使用会话状态
16.2.1 向会话状态添加条目
16.2.2 从会话状态删除条目
16.2.3 启动用户会话
16.2.4 结束用户会话
16.2.5 处理会话事件
16.2.6 在进程内存储会话状态
16.2.7 在Windows服务存储会话状态
16.2.8 在数据库表存储会话状态
16.2.9 禁止会话状态
16.3 使用无cookie会话
16.3.1 启用无cookie会话
16.3.2 无cookie会话的限制
16.4 小结

第17章 缓存ASP.NET应用程序

17.1 使用页面输出缓存
17.1.1 按参数改变缓存内容
17.1.2 按头改变缓存内容
17.1.3 按自定义的字符串改变缓存内容
17.1.4 设置缓存位置
17.1.5 使用HttpCachePolicy类
17.2 使用页面分段缓存
17.2.1 按参数改变页面分段缓存
17.2.2 页面分段缓存的限制
17.3 使用页面数据缓存
17.3.1 在缓存添加条目
17.3.2 添加缓存文件依赖性
17.3.3 添加缓存触发器依赖性
17.3.4 添加缓存键依赖性
17.3.5 建立绝对的过期策略
17.3.6 建立变化的过期策略
17.3.7 设置缓存条目优先级
17.3.8 创建缓存回调方法
17.4 小结

第18章 应用程序跟踪和错误处理

18.1 响应错误
18.1.1 查看错误信息
18.1.2 页面级错误处理
18.1.3 应用程序级错误处理
18.2 跟踪和监视应用程序
18.2.1 跟踪页面的执行
18.2.2 监视ASP.NET进程
18.2.3 获取进程信息
18.3 记录事件
18.4 使用调试器
18.4.1 连接调试器
18.4.2 建立断点
18.4.3 建立观察
18.4.4 逐步执行ASP.NET页面
18.5 小结

第五部分 保护ASP.NET应用程序

第19章 使用基于表单的身份验证

19.1 使用表单身份验证
19.1.1 启用表单身份验证
19.1.2 配置表单身份验证
19.1.3 配置表单授权
19.1.4 获取用户信息
19.1.5 创建注销页面
19.1.6 用Web.Config文件进行用户身份验证
19.1.7 用XML文件进行用户身份验证
19.1.8 用数据库表进行用户身份验证
19.1.9 实现基于角色的身份验证
19.1.10 创建自定义的身份验证票据
19.1.11 表单身份验证和Web阵
19.2 使用Passport身份验证
19.2.1 启用Passport身份验证
19.2.2 允许用户登录和注销
19.2.3 获取用户信息
19.3 小结

第20章 基于Windows的身份验证

20.1 使用基于Windows的身份验证
20.1.1 配置Internet Information Server安全
20.1.2 配置Microsoft Windows安全
20.1.3 配置Windows身份验证
20.1.4 配置Windows授权
20.1.5 配置自定义角色
20.1.6 获取用户信息
20.2 模拟用户账号
20.3 设置安全策略
20.4 小结

第21章 加密网上发送数据

21.1 使用Secure Sockets Layer
21.1.1 加密
21.1.2 身份验证
21.1.3 数据完整性
21.1.4 SSL有多安全
21.2 将服务器配置为使用SSL
21.2.1 产生证书请求文件
21.2.2 申请服务器证书
21.2.3 安装服务器证书
21.3 在ASP.NET页面使用SSL
21.4 使用.NET加密类
21.4.1 使用散列算法
21.4.2 使用对称加密算法
21.4.3 使用不对称加密
21.5 小结

第六部分 建立ASP.NET Web服务

第22章 创建XML Web服务

22.1 XML Web服务概述
22.1.1 XML Web服务促进通信
22.1.2 XML Web服务允许聚集
22.2 创建简单的XML Web服务
22.2.1 设置WebMethod属性
22.2.2 设置WebService属性
22.2.3 预编译XML Web服务
22.3 从浏览器测试XML Web服务
22.3.1 用HTTP-Get调用XML Web服务
22.3.2 用HTTP-Post调用XML Web服务
22.3.3 用SOAP调用XML Web服务
22.4 通过代理类访问XML Web服务
22.4.1 产生XML Web服务代理类
22.4.2 使用XML Web服务代理类
22.4.3 使用Web服务描述语言工具
22.4.4 设置代理类属性
22.5 在XML Web服务传送复杂数据
22.5.1 XML Web服务和数组
22.5.2 XML Web服务和类
22.5.3 Web服务和DataSet
22.5.4 Web服务和二进制文件
22.6 XML Web服务和网站的交互
22.6.1 XML Web服务和应用程序状态
22.6.2 XML Web服务和会话状态
22.7 小结

第23章 高级的XML Web服务

23.1 使用WebService行为
23.1.1 WebService行为的限制
23.1.2 用WebService行为创建简单的页面
23.1.3 使用WebService行为回调函数
23.1.4 缓存WebService行为的错误
23.1.5 使用WebService行为执行部分更新
23.1.6 使用WebService行为获取数据数据
23.2 保护XML Web服务
23.2.1 安全的XML Web服务
23.2.2 创建数据库表
23.2.3 创建Login( )方法
23.2.4 获取自定义的SOAP头
23.2.5 验证会话键
23.2.6 缓存会话键
23.2.7 建立安全的XML Web服务
23.2.8 访问安全的Web服务
23.3 使用HTML模式匹配
23.3.1 创建WSDL文档
23.3.2 指定正则表达式模式
23.3.3 创建简单的HTML模式匹配服务
23.3.4 在HTML模式匹配使用输入参数
23.3.5 建立一个Six Degrees Web服务
23.4 小结

第七部分 利用.NET框架

第24章 操作集合和字符串

24.1 使用集合
24.1.1 使用ArrayList集合
24.1.2 使用HashTable集合
24.1.3 使用SortedList集合
24.2 使用字符串
24.2.1 对字符串进行格式化
24.2.2 使用String方法和属性
24.2.3 使用StringBuilder类
24.3 使用正则表达式
24.3.1 使用正则表达式类
24.3.2 研究正则表达式的元素
24.3.3 匹配单一字符
24.3.4 匹配特殊字符
24.3.5 匹配字符的替代序列
24.3.6 使用数量词进行匹配
24.3.7 正则表达式的超范围问题
24.3.8 捕获和反向引用
24.3.9 使用替换模式
24.3.10 设置正则表达式选项
24.4 小结

第25章 操作文件系统

25.1 使用文件和目录
25.1.1 创建和读取文本文件
25.1.2 创建和读取二进制文件
25.1.3 显示目录的内容
25.1.4 获取路径信息
25.2 使用串行化
25.2.1 使用二进制串行化
25.2.2 使用XML串行化
25.3 小结

第26章 发送电子邮件和访问网络

26.1 从ASP.NET页面发送电子邮件
26.1.1 Microsoft SMTP Service
26.1.2 发送简单的电子邮件
26.1.3 使用MailMessage类
26.1.4 向电子邮件消息添加附件
26.1.5 发送HTML电子邮件
26.2 使用Message Queuing
26.2.1 配置Microsoft Message Queuing
26.2.2 使用消息队列
26.2.3 向队列发送消息
26.2.4 从队列获取消息
26.2.5 显示消息体
26.2.6 发送和接收复杂的消息
26.3 使用HTTP协议访问其他网站
26.3.1 使用WebClient类
26.3.2 使用HttpWebRequest类
26.3.3 解析域名
26.4 小结

第27章 用GDI+动态创建图形

27.1 建立简单的图像
27.2 使用GDI+绘制对象
27.2.1 创建位图
27.2.2 使用Graphics对象
27.2.3 设置图形质量
27.2.4 使用颜色
27.2.5 使用画刷
27.2.6 使用画笔
27.2.7 绘制矩形
27.2.8 绘制直线
27.2.9 绘制椭圆
27.2.10 绘制曲线
27.3 绘制文本字符串
27.4 建立GDI+应用程序
27.4.1 创建ASP.NET绘图应用程序
27.4.2 创建简单的图表应用程序
27.5 小结

第八部分 建立自定义的ASP.NET控件

第28章 开发自定义的控件

28.1 创建简单的控件
28.2 使用HtmlTextWriter
28.3 向控件添加属性和方法
28.3.1 使用属性访问函数
28.3.2 使用控件方法
28.4 解析内部内容
28.5 向控件添加子控件
28.6 自定义控件和事件
28.7 参与postback
28.8 创建组合控件
28.9 派生现有的控件
28.10 访问当前上下文
28.11 调试控件
28.12 小结

第29章 高级控件开发

29.1 向控件添加模板
29.1.1 创建一个模板的多个实例
29.1.2 向一个控件添加多个模板
29.2 创建DataBound控件
29.2.1 实现不同的数据
29.2.2 实现简单的DataBound控件
29.2.3 使用DataBound控件和模板
29.2.4 使用DataBound控件和状态
29.2.5 将自定义控件绑定到DataSet
29.3 使用自定义控件和Web服务
29.3.1 创建特色产品Web服务
29.3.2 创建特色产品自定义控件
29.3.3 显示特色产品控件
29.4 小结

第九部分 ASP.NET应用程序示例

第30章 创建职业介绍网站

30.1 安装职业介绍网站
30.2 创建主页
30.3 对用户进行身份验证
30.4 创建虚拟URL
30.5 列出和更新职位
30.6 创建职业介绍XML Web服务
30.7 小结

第31章 创建网上商店

31.1 ASP.NET Unleashed示例商店概述
31.2 安装ASP.NET Unleashed示例商店
31.3 建立导航系统
31.4 缓存产品数据
31.5 建立购物车
31.6 动态装载产品模板
31.6.1 使用LoadControl方法
31.6.2 code-behind产品模板
31.7 小结

第十部分 附录

附录A 从ASP迁移到ASP.NET
附录B HTML控件参考
附录C Web控件参考
第一部分 使用ASP.NET Web表单

第1章 建立ASP.NET页面

1.1 ASP.NET和.NET框架
1.1.1 .NET框架类库
1.1.2 理解名称空间
1.1.3 标准的ASP.NET名称空间
1.1.4 与.NET框架兼容的语言
1.2 ASP.NET控件简介
1.2.1 简单的ASP.NET页面
1.2.2 ASP.NET控件的优点
1.2.3 ASP.NET控件概述
1.3 向ASP.NET页面添加应用逻辑
1.3.1 处理控件事件
1.3.2 处理页面事件
1.4 ASP.NET页面的结构
1.4.1 指令
1.4.2 代码声明块
1.4.3 ASP.NET控件
1.4.4 代码显示块
1.4.5 服务器端注释
1.4.6 服务器端包含指令
1.4.7 文本和HTML标记
1.5 小结

第2章 用Web服务器控件建立表单

2.1 建立智能表单
2.1.1 Label控件
2.1.2 TextBox控件
2.1.3 Button控件
2.1.4 RadioButton和RadioButtonList控件
2.1.5 CheckBox和CheckBoxList控件
2.1.6 DropDownList控件
2.1.7 ListBox控件
2.2 控制页面导航
2.2.1 将表单提交到另一个页面
2.2.2 使用Redirect( )方法
2.2.3 使用HyperLink控件
2.3 在控件上进行格式化
2.3.1 基本Web控件属性
2.3.2 在Web控件上应用样式
2.4 小结

第3章 用检验控件执行表单的检验

3.1 使用客户端检验
3.1.1 配置客户端检验
3.1.2 启用和禁用客户端检验
3.2 必填域:RequiredFieldValidator控件
3.3 检验表达式:RegularExpressionValidator控件
3.3.1 检验电子邮件地址
3.3.2 检验用户名和口令
3.3.3 检验电话号码
3.3.4 检验网址
3.3.5 检验条目长度
3.3.6 检验邮政编码
3.4 比较值:CompareValidator控件
3.4.1 比较一个控件与另一个控件的值
3.4.2 比较一个控件的值与固定值
3.4.3 执行数据类型检查
3.5 检查值的范围:RangeValidator控件
3.6 错误汇总:ValidationSummary控件
3.7 执行自定义的检验:CustomValidator控件
3.8 禁用检验
3.9 小结

第4章 高级控件编程

4.1 使用视图状态
4.1.1 禁用视图状态
4.1.2 将值添加到视图状态
4.2 显示和隐藏内容
4.2.1 使用Visible和Enabled属性
4.2.2 使用Panel控件
4.2.3 模拟多页面表单
4.2.4 通过程序添加控件
4.2.5 将控件添加到页面
4.2.6 PlaceHolder控件
4.2.7 动态产生表单
4.2.8 动态产生列表条目
4.3 使用复杂控件
4.3.1 使用Calendar控件显示交互式的日历
4.3.2 使用AdRotator控件显示广告条
4.3.3 使用HTMLInputFile控件接受文件上传
4.4 小结

第二部分 高级ASP.NET页面开发

第5章 用用户控件创建自定义控件

5.1 用用户控件包含标准内容
5.2 显露用户控件的属性和方法
5.3 显露用户控件的Web控件
5.4 显露用户控件的事件
5.5 通过程序装载用户控件
5.6 小结

第6章 将代码与表示分离

6.1 创建业务组件
6.2 创建多层Web应用程序
6.3 使用code-behind
6.3.1 code-behind是如何工作的
6.3.2 编译code-behind文件
6.3.3 从一个code-behind文件派生多个页面
6.3.4 编译完整的ASP.NET页面
6.4 小结

第7章 用可移动控件为可移动设备服务

7.1 使用可移动设备软件模拟
7.2 无线应用协议简介
7.3 建立WML页面
7.3.1 配置IIS
7.3.2 WML和XML
7.3.3 创建卡片集
7.3.4 用WML链接文件
7.4 使用ASP.NET可移动控件
7.4.1 创建可移动表单
7.4.2 动态激活可移动表单
7.4.3 显示文本
7.4.4 显示列表
7.4.5 创建文本框
7.4.6 检验用户输入
7.4.7 显示图像
7.4.8 进行电话呼叫
7.4.9 用可移动控件显示广告
7.4.10 使用可移动控件显示日历
7.5 创建跨设备兼容的可移动页面
7.5.1 探测设备功能
7.5.2 使用DeviceSpecific选择设备
7.5.3 使用表单模板集
7.6 小结

第8章 使用第三方控件

8.1 使用Microsoft Internet Explorer WebControls
8.1.1 使用TreeView控件
8.1.2 使用Toolbar控件
8.1.3 使用TabStrip控件
8.2 使用Superexpert控件
8.2.1 使用Content Rotator控件
8.2.2 使用SuperDataGrid控件
8.2.3 使用DataForm控件
8.3 小结

第三部分 使用ADO.NET

第9章 ADO.NET简介

9.1 ADO.NET概述
9.2 执行常见的数据库任务
9.2.1 打开数据库链接
9.2.2 从数据库表获取记录
9.2.3 在查询使用参数
9.2.4 向数据库添加记录
9.2.5 更新数据库记录
9.2.6 删除数据库记录
9.3 改进数据库性能
9.3.1 使用SQL存储过程
9.3.2 获取返回值和输出参数
9.3.3 执行复杂的存储过程
9.3.4 用链接缓冲改进性能
9.4 高级的数据库主题
9.4.1 在事务执行数据库命令
9.4.2 指定命令行为
9.4.3 获取表模式信息
9.5 小结

第10章 将数据绑定到Web控件

10.1 数据绑定概述
10.2 将服务器控件绑定到数据
10.2.1 绑定到Repeater控件
10.2.2 使用模板
10.2.3 视图状态和Repeater控件
10.2.4 绑定到DropDownList控件
10.2.5 绑定到RadioButtonList控件
10.2.6 绑定到CheckBoxList控件
10.2.7 绑定到ListBox控件
10.2.8 绑定到其他控件
10.3 创建主/明细表单
10.3.1 创建单页面的主/明细表单
10.3.2 创建多页面的主/明细表单
10.4 小结

第11章 使用DataList和DataGrid控件

11.1 DataList和DataGrid控件概述
11.1.1 理解事件冒泡机制
11.1.2 使用模板
11.1.3 使用DataKeys集合
11.2 使用DataList控件
11.2.1 在DataList显示数据
11.2.2 对DataList使用模板
11.2.3 对DataList使用样式
11.2.4 在DataList创建多个列
11.2.5 捕获DataList控件引发的事件
11.2.6 选择DataList的条目
11.2.7 通过DataList控件使用DataKeys集合
11.2.8 用DataList控件创建主/明细表单
11.2.9 编辑DataList控件的条目
11.3 使用DataGrid控件
11.3.1 在DataGrid控件创建列
11.3.2 对DataGrid使用样式
11.3.3 对DataGrid控件的列进行排序
11.3.4 对DataGrid的记录进行分页
11.3.5 选择DataGrid控件的行
11.3.6 编辑DataGrid控件的条目
11.3.7 使用模板编辑DataGrid控件的条目
11.4 小结

第12章 操作DataSet

12.1 理解DataSet
12.1.1 DataSet的元素
12.1.2 向DataSet添加DataTable
12.1.3 将控件绑定到DataSet
12.2 理解DataTable
12.2.1 通过程序创建DataTable
12.2.2 设置DataTable属性
12.2.3 在DataTable设置列属性
12.2.4 在DataTable计算列值
12.2.5 在DataTable之间定义关系
12.2.6 获取DataTable模式信息
12.2.7 在DataTable更新记录
12.3 理解DataView
12.3.1 在DataView对行进行过滤
12.3.2 在DataView对行进行排序
12.3.3 在DataView搜索行
12.4 通过ASP.NET页面使用DataSet
12.4.1 缓存DataSet
12.4.2 显示缓存的数据
12.4.3 过滤缓存的数据
12.4.4 在缓存的DataSet搜索行
12.5 小结

第13章 操作XML

13.1 XML类概述
13.2 通过DataSet使用XML
13.2.1 将XML文档读入DataSet
13.2.2 通过ReadXml使用模式
13.2.3 从DataSet写XML文档
13.2.4 通过DataSet使用XMLData Documents
13.3 使用样式单转换XML
13.4 使用ASP.NET Xml控件
13.5 使用XslTransform类
13.6 使用强类型的DataSet
13.7 小结

第14章 使用ADO.NET创建搜索页面

14.1 使用SQL Server全文搜索
14.1.1 配置Full-Text Search Service
14.1.2 对数据数据执行任意文本查询
14.1.3 对数据数据执行布尔查询
14.1.4 上传二进制文档并且进行索引
14.2 使用Microsoft Indexing Service
14.2.1 配置Microsoft Indexing Service
14.2.2 将SQL Server配置为使用Microsoft Indexing Service
14.2.3 获取文档属性
14.2.4 对文件系统数据执行任意文本查询
14.2.5 对文件系统数据执行布尔查询
14.2.6 对文档属性执行查询
14.3 小结

第四部分 使用ASP.NET应用程序

第15章 创建ASP.NET应用程序

15.1 ASP.NET应用程序概述
15.2 使用应用程序状态
15.2.1 理解应用程序状态和同步
15.2.2 使用Global.asax文件
15.2.3 理解Context和使用Global.asax文件
15.2.4 处理应用程序Start和Init事件
15.2.5 处理Application_BeginRequest事件
15.3 使用Web.Config文件
15.3.1 研究配置部分
15.3.2 修改配置设置
15.3.3 设置配置位置
15.3.4 锁定配置设置
15.3.5 添加自定义的配置信息
15.4 使用HTTP处理器和模块
15.4.1 使用HTTP处理器
15.4.2 使用HTTP模块
15.4.3 创建WhosOn应用程序
15.5 小结

第16章 跟踪用户会话

16.1 使用浏览器cookie
16.1.1 cookie如何工作
16.1.2 创建和读取会话cookie
16.1.3 创建和读取持久性cookie
16.1.4 设置cookie属性
16.1.5 cookie的限制
16.2 使用会话状态
16.2.1 向会话状态添加条目
16.2.2 从会话状态删除条目
16.2.3 启动用户会话
16.2.4 结束用户会话
16.2.5 处理会话事件
16.2.6 在进程内存储会话状态
16.2.7 在Windows服务存储会话状态
16.2.8 在数据库表存储会话状态
16.2.9 禁止会话状态
16.3 使用无cookie会话
16.3.1 启用无cookie会话
16.3.2 无cookie会话的限制
16.4 小结

第17章 缓存ASP.NET应用程序

17.1 使用页面输出缓存
17.1.1 按参数改变缓存内容
17.1.2 按头改变缓存内容
17.1.3 按自定义的字符串改变缓存内容
17.1.4 设置缓存位置
17.1.5 使用HttpCachePolicy类
17.2 使用页面分段缓存
17.2.1 按参数改变页面分段缓存
17.2.2 页面分段缓存的限制
17.3 使用页面数据缓存
17.3.1 在缓存添加条目
17.3.2 添加缓存文件依赖性
17.3.3 添加缓存触发器依赖性
17.3.4 添加缓存键依赖性
17.3.5 建立绝对的过期策略
17.3.6 建立变化的过期策略
17.3.7 设置缓存条目优先级
17.3.8 创建缓存回调方法
17.4 小结

第18章 应用程序跟踪和错误处理

18.1 响应错误
18.1.1 查看错误信息
18.1.2 页面级错误处理
18.1.3 应用程序级错误处理
18.2 跟踪和监视应用程序
18.2.1 跟踪页面的执行
18.2.2 监视ASP.NET进程
18.2.3 获取进程信息
18.3 记录事件
18.4 使用调试器
18.4.1 连接调试器
18.4.2 建立断点
18.4.3 建立观察
18.4.4 逐步执行ASP.NET页面
18.5 小结

第五部分 保护ASP.NET应用程序

第19章 使用基于表单的身份验证

19.1 使用表单身份验证
19.1.1 启用表单身份验证
19.1.2 配置表单身份验证
19.1.3 配置表单授权
19.1.4 获取用户信息
19.1.5 创建注销页面
19.1.6 用Web.Config文件进行用户身份验证
19.1.7 用XML文件进行用户身份验证
19.1.8 用数据库表进行用户身份验证
19.1.9 实现基于角色的身份验证
19.1.10 创建自定义的身份验证票据
19.1.11 表单身份验证和Web阵
19.2 使用Passport身份验证
19.2.1 启用Passport身份验证
19.2.2 允许用户登录和注销
19.2.3 获取用户信息
19.3 小结

第20章 基于Windows的身份验证

20.1 使用基于Windows的身份验证
20.1.1 配置Internet Information Server安全
20.1.2 配置Microsoft Windows安全
20.1.3 配置Windows身份验证
20.1.4 配置Windows授权
20.1.5 配置自定义角色
20.1.6 获取用户信息
20.2 模拟用户账号
20.3 设置安全策略
20.4 小结

第21章 加密网上发送数据

21.1 使用Secure Sockets Layer
21.1.1 加密
21.1.2 身份验证
21.1.3 数据完整性
21.1.4 SSL有多安全
21.2 将服务器配置为使用SSL
21.2.1 产生证书请求文件
21.2.2 申请服务器证书
21.2.3 安装服务器证书
21.3 在ASP.NET页面使用SSL
21.4 使用.NET加密类
21.4.1 使用散列算法
21.4.2 使用对称加密算法
21.4.3 使用不对称加密
21.5 小结

第六部分 建立ASP.NET Web服务

第22章 创建XML Web服务

22.1 XML Web服务概述
22.1.1 XML Web服务促进通信
22.1.2 XML Web服务允许聚集
22.2 创建简单的XML Web服务
22.2.1 设置WebMethod属性
22.2.2 设置WebService属性
22.2.3 预编译XML Web服务
22.3 从浏览器测试XML Web服务
22.3.1 用HTTP-Get调用XML Web服务
22.3.2 用HTTP-Post调用XML Web服务
22.3.3 用SOAP调用XML Web服务
22.4 通过代理类访问XML Web服务
22.4.1 产生XML Web服务代理类
22.4.2 使用XML Web服务代理类
22.4.3 使用Web服务描述语言工具
22.4.4 设置代理类属性
22.5 在XML Web服务传送复杂数据
22.5.1 XML Web服务和数组
22.5.2 XML Web服务和类
22.5.3 Web服务和DataSet
22.5.4 Web服务和二进制文件
22.6 XML Web服务和网站的交互
22.6.1 XML Web服务和应用程序状态
22.6.2 XML Web服务和会话状态
22.7 小结

第23章 高级的XML Web服务

23.1 使用WebService行为
23.1.1 WebService行为的限制
23.1.2 用WebService行为创建简单的页面
23.1.3 使用WebService行为回调函数
23.1.4 缓存WebService行为的错误
23.1.5 使用WebService行为执行部分更新
23.1.6 使用WebService行为获取数据数据
23.2 保护XML Web服务
23.2.1 安全的XML Web服务
23.2.2 创建数据库表
23.2.3 创建Login( )方法
23.2.4 获取自定义的SOAP头
23.2.5 验证会话键
23.2.6 缓存会话键
23.2.7 建立安全的XML Web服务
23.2.8 访问安全的Web服务
23.3 使用HTML模式匹配
23.3.1 创建WSDL文档
23.3.2 指定正则表达式模式
23.3.3 创建简单的HTML模式匹配服务
23.3.4 在HTML模式匹配使用输入参数
23.3.5 建立一个Six Degrees Web服务
23.4 小结

第七部分 利用.NET框架

第24章 操作集合和字符串

24.1 使用集合
24.1.1 使用ArrayList集合
24.1.2 使用HashTable集合
24.1.3 使用SortedList集合
24.2 使用字符串
24.2.1 对字符串进行格式化
24.2.2 使用String方法和属性
24.2.3 使用StringBuilder类
24.3 使用正则表达式
24.3.1 使用正则表达式类
24.3.2 研究正则表达式的元素
24.3.3 匹配单一字符
24.3.4 匹配特殊字符
24.3.5 匹配字符的替代序列
24.3.6 使用数量词进行匹配
24.3.7 正则表达式的超范围问题
24.3.8 捕获和反向引用
24.3.9 使用替换模式
24.3.10 设置正则表达式选项
24.4 小结

第25章 操作文件系统

25.1 使用文件和目录
25.1.1 创建和读取文本文件
25.1.2 创建和读取二进制文件
25.1.3 显示目录的内容
25.1.4 获取路径信息
25.2 使用串行化
25.2.1 使用二进制串行化
25.2.2 使用XML串行化
25.3 小结

第26章 发送电子邮件和访问网络

26.1 从ASP.NET页面发送电子邮件
26.1.1 Microsoft SMTP Service
26.1.2 发送简单的电子邮件
26.1.3 使用MailMessage类
26.1.4 向电子邮件消息添加附件
26.1.5 发送HTML电子邮件
26.2 使用Message Queuing
26.2.1 配置Microsoft Message Queuing
26.2.2 使用消息队列
26.2.3 向队列发送消息
26.2.4 从队列获取消息
26.2.5 显示消息体
26.2.6 发送和接收复杂的消息
26.3 使用HTTP协议访问其他网站
26.3.1 使用WebClient类
26.3.2 使用HttpWebRequest类
26.3.3 解析域名
26.4 小结

第27章 用GDI+动态创建图形

27.1 建立简单的图像
27.2 使用GDI+绘制对象
27.2.1 创建位图
27.2.2 使用Graphics对象
27.2.3 设置图形质量
27.2.4 使用颜色
27.2.5 使用画刷
27.2.6 使用画笔
27.2.7 绘制矩形
27.2.8 绘制直线
27.2.9 绘制椭圆
27.2.10 绘制曲线
27.3 绘制文本字符串
27.4 建立GDI+应用程序
27.4.1 创建ASP.NET绘图应用程序
27.4.2 创建简单的图表应用程序
27.5 小结

第八部分 建立自定义的ASP.NET控件

第28章 开发自定义的控件

28.1 创建简单的控件
28.2 使用HtmlTextWriter
28.3 向控件添加属性和方法
28.3.1 使用属性访问函数
28.3.2 使用控件方法
28.4 解析内部内容
28.5 向控件添加子控件
28.6 自定义控件和事件
28.7 参与postback
28.8 创建组合控件
28.9 派生现有的控件
28.10 访问当前上下文
28.11 调试控件
28.12 小结

第29章 高级控件开发

29.1 向控件添加模板
29.1.1 创建一个模板的多个实例
29.1.2 向一个控件添加多个模板
29.2 创建DataBound控件
29.2.1 实现不同的数据
29.2.2 实现简单的DataBound控件
29.2.3 使用DataBound控件和模板
29.2.4 使用DataBound控件和状态
29.2.5 将自定义控件绑定到DataSet
29.3 使用自定义控件和Web服务
29.3.1 创建特色产品Web服务
29.3.2 创建特色产品自定义控件
29.3.3 显示特色产品控件
29.4 小结

第九部分 ASP.NET应用程序示例

第30章 创建职业介绍网站

30.1 安装职业介绍网站
30.2 创建主页
30.3 对用户进行身份验证
30.4 创建虚拟URL
30.5 列出和更新职位
30.6 创建职业介绍XML Web服务
30.7 小结

第31章 创建网上商店

31.1 ASP.NET Unleashed示例商店概述
31.2 安装ASP.NET Unleashed示例商店
31.3 建立导航系统
31.4 缓存产品数据
31.5 建立购物车
31.6 动态装载产品模板
31.6.1 使用LoadControl方法
31.6.2 code-behind产品模板
31.7 小结

第十部分 附录

附录A 从ASP迁移到ASP.NET
附录B HTML控件参考
附录C Web控件参考

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧