《ASP.NET技术内幕》附录—附录A

第十部分 附录

附录A  ASP迁移到ASP.NET

 

本附录主要内容:

 

l         ASP.NET页面以.ASPx扩展名结束

l         OptionExplicit是默认打开的

l         不再有变体

l         在向子例程和方法传递参数时使用圆括号

l         必须在

<%

Response.Write( AddNums( 12, 34 ) )

%>

这个新要求的影响是不能在子例程或函数中直接表达内容。例如,以下脚本在传统 ASP中工作正常:

<%

SubShowError

%>

Error!

<%

EndSub

ShowError

%>

但是,因为在 ASP.NET中不能在代码表达块中声明函数或子例程,所以需要像下面这样重写代码:

SubShowError

Response.Write(“Error!“ )

EndSub

<%

ShowError

%>

 

A.6   参数是通过值传递的

       VBScript和以前的VisualBasic版本中,参数在默认情况下是通过引用传递给子例程和函数的。

但是在VisualBasic.NET中,参数是通过值传递的。当参数通过值传递给函数时,在函数内对参数的修改不影响参数在此函数外的值。然而,当参数通过引用传递时,对参数的修改在函数外被保留。

仍然可以使用 ByValByRef关键字指定参数是通过值传递,还是通过引用传递。例如,以下页面演示如何显式地指定通过值和通过引用将参数传递给子例程:

SubAddByVal( ByValintParam)

intParam+= 1

EndSub

 

SubAddByRef( ByRefintParam)

intParam+=1

EndSub

<%

DimintNumAsInteger= 3

' intNumstillequals3 afterAddByVal

AddByVal( intNum)

' intNumnowequals4 afterAddByRef

AddByRef( intNum)

%>

 

A.7   表单应该被提交回相同的页面

 

要想充分利用ASP.NET框架,就不应该创建提交到另一个页面的 HTML表单。如果表单被提交到另一个页面,当前页面维护的视图状态就会丢失。

在传统ASP中,表单将数据提交到另一个页面是非常常见的,如图 A1所示。

ASP.NET框架中,操作表单的首选方式是将表单提交回相同的页面。将表单提交回它本身被称为postback。图A- 2演示了postback的执行过程。

 

A-1   提交到新页面                                                A-2   执行postback

 

当你将表单提交回它本身时,可以利用视图状态(在各次提交之间自动保留控件的属性值)。在执行postback之后,可以使用Response.Redirect方法将用户转移到新页面。

 

A.8   每个页面只有一个服务器端表单

 

ASP.NET框架的一个重要限制是在一个页面中只能有一个服务器端表单。例如,许多网站用同一个页面进行新用户的注册和现有用户的登录。在 ASP.NET框架中,建立这种页面很困难。

ASP.NET框架不允许一个页面包含两个表单,否则就不能利用 ASP.NET功能,比如表单检验和视图状态。你必须将单个页面分割为两个页面。

这个限制不适用于一般的 HTML表单;它只应用于服务器端表单。一个页面中可以包含任意数量的标准客户端表单。

 

A.9   在操作对象时不使用SetLet

 

在以前的ASP版本中,在将对象赋值给变量时必须使用 Set。例如,在创建Connection对象的实例时,使用以下语句:

<%

SetconPubs= Server.CreateObject" ADODB.Connection"

%>

在使用VisualBasic.NET创建 A S P. N ET页面时,不再使用Set语句,而是使用简单的赋值语句:

<%

conPubs=Server.CreateObject" ADODB.Connection"

%>

而且,也不再使用Let语句。

 

A.10   不支持场所线程的组件

 

在默认情况下,ASP.NET页面不支持使用单线程场所( STA)模型的组件。而且,在默认情况下不支持传统ASP的内在接口,比如OnStartPageOnEndPage

如果你希望使用场所线程模型的组件,比如ADOConnection对象或Scripting.Dictionary对象,那么需要在页面顶部添加以下页面指令:

<%@ PageASPCompat="true"%>

例如,以下页面使用传统的 ADO显示Pubs数据库中的Titles表的所有记录。如果不禁用 ASP兼容性,页面会失败。

<%@ PageASPCompat="true" %>

<%

DimconPubs

DimrsTitles

 

conPubs= Server.CreateObject( "ADODB.Connection" )

conPubs.Open( "Provider=sqloledb;UID=sa;PWD=secret;database=pubs" )

 

rsTitles= ConPubs.Execute( "Select* fromTitles" )

 

WhileNotrsTitles.eof

Response.Write( rsTitles( "Title" ).Value)

rsTitles.MoveNext

EndWhile

%>

 

A.11   没有无索引的默认属性

 

VisualBasic不再支持无索引的默认属性。例如,在传统 ASP中,不需要显式地调用RecordSet对象的Value属性。以下代码就能显示 RecordSet字段的值:

Response.WriteRS" Title"))

但是,在ASP.NET中,必须显式地引用属性。所以,需要将这个语句重写为:

Response.WriteRS" Title".Value

 

A.12   ASP.NET页面只能包含一种语言

 

在传统 ASP中,可以使用

你可能感兴趣的:(《ASP.NET技术内幕》附录—附录A)