ASP.NET与ASP的区别(4)

2017 年 12 月 7 日2840

另一个有关控件功能的范例是Calendar控件,它只利用一行代码就能在页面上创建一个功能齐全的日历:

<asp: Calendar runat ="server"/>

这就行了,它的实现无需任何多余的东西。

这种简化的方法并不意味着控件是简单的,而只是表明控件的使用很简单。编写代码的责任已经从页面开发人员那里转到了控件开发人员肩上。另外还有许多非Microsoft公司开发的控件,有些正在计划中,而有些则已经发布了,它们覆盖了从更高级的网格到TreeViews的很多方面。也可以编写自己的控件,这方面的内容将在第18章中介绍。

4. 语言的改进

ASP.NET一大激动人心的新特性就是再也不存在脚本了。不过这么说有点夸张,实际上真正不存在的是无类型,即这些语言的解释性。ASP.NET已不再支持VBScript,转而全面支持Visual Basic,它仍然支持JScript,但同时增加了类型。另外ASP.NET还引入了一种新的语言C#(读作C Sharp),C#的格式和C/C++很相似。由于ASP.NET完全是由C#编写而成的,因此C#的引入决不仅仅是简单地增加了新语言。

第3章将详细介绍语言的改进问题,不过现在需要先了解一下所有语言的共性。

● 所有语言都支持数据类型。

● 所有语言都使用一个公用的数据类型集。

● 所有语言都是经过完全编译的。

● 所有语言都是面向对象的,并且支持继承性。

还有同样重要的一点,语言支持是内置于公共语言运行库(CLR)的,CLR提供这种公共支持。这表明像继承性这样的特性是跨语言的,因此可以用C#编写组件,然后使用Visual Basic继承并扩展这些组件。而这些都是通过CLR来管理的,同时它还提供了跨语言调试功能,这样就可以使用一个调试器既对ASP.NET页面中的Visual Basic代码进行调试,也对C#组件进行调试。

ASP.NET还提供了可扩展性,这就意味着其他语言都可以获得支持。Microsoft公司在.NET SDK中提供了VB.NET、JScript以及C#这3种标准语言,许多其他语言是由第三方提供的。

5. 代码与内容分离

这通常是站点设计中一个让人很不习惯的功能,因为许多站点完全是由开发人员创建的。虽然让开发人员设计并创建站点并不是件坏事,但是开发人员通常不会成为很好的设计人员。而ASP就是建立在这个问题基础上的,因为代码(ASP 脚本)和内容(HTML)大都混合在一起。

这就使得同时设计站点和编写代码变得很困难,另外如果页面需要升级,就会存在潜在的危险。

代码内联

ASP.NET通过两种方法来解决上面的问题。第1种方法就是代码内联模型,在该模型中代码仍然保存在ASP.NET页面中,但它并不和HTML混合在一起。我们可以很容易地将代码和内容分为两个部分,例如:

<html>

<%--This is the code section %>

<script runat="server">

Public Sub btn_Click (Sender As Object, E As EventArgs)

YourName.Text = Name.Text

End Sub

</script>

<body>

<%-- This is the content section %>

<form runat="server">

Enter your name: <asp: TextBox runat="server"/>

<br/>

Press the button: <asp: Button

runat="server" Text="Press Me"/>

<br/>

Your name is: <asp: Label runat="server"/>

</form>

</body>

</html>

上面的范例并不是一个很极端的设计,不过它和经常混合<%…%>服务器程序块与HTML的ASP相比还是有明显差别的。现在不用担心代码的情况,因为后面会介绍。有一点很重要,即所有脚本和内容都是分离的,这是由于ASP.NET具有新的服务器控件结构,该结构允许从基于服务器的代码中访问HTML控件。后面将介绍这方面的内容。

后台编码

第2种分离代码与内容的方法是后台编码(code-behind)模型,该模型中的代码被完全转移到了一个单独的文件中。对于上面的范例,HTML文件应该如下所示:

<%@Page Language="VB" Inherits="Ch1CodeBehind"

Src="Components\\Ch1CodeBehind.vb" %>

<html>

<body>

<%--This is the content section %>

<form runat="server">

Enter your name: <asp: TextBox id ="Name" runat="server"/>

<br/>

Press the button: <asp: Button OnClick ="btn_Click"

runat ="server" Text="Press Me"/>

<br/>

Your name is: <asp: Label runat="server"/>

</form>

</body>

</html>

这里同样不用担心代码,重要的是结构。请注意脚本程序块已被删除,并添加了一个特殊的Page命令(该内容请参阅第4章)。这就告诉CLR当前页面从指定的文件中继承了代码,如下所示:

Imports System

Imports System.Web.UI

Imports System.Web.UI.WebControls

Public Class Ch1CodeBehind

Inherits System.Web.UI.Page

Public Sub btn_Click (Sender As Object, E As EventArgs)

YourName.Text = Name.Text

End Sub

End Class

请注意,这里的过程btn_Click和内联代码模型一样。这是后台编码模型的一个重要特征;除了几个命令之外,代码是一样的。另外,现在是在一个编译环境中工作,因此性能没有什么损失。

6. 配置

ASP.NET的配置由两个要素决定。第一个是标准IIS设置,这和现存的ASP应用程序是一样的。第二个是配置文件,这个XML文件包含了应用程序的元数据。另外还有一个通用文件machine.config,它包含了所有ASP.NET应用程序的默认值,同时每个ASP.NET应用程序还可以有自己的web.config文件,用来重写这些默认值。包含配置信息的文件有一个优点,就是无需通过注册表来修改设置,因为每个应用程序都是自包含的。另外当部署一个ASP.NET应用程序时,这种配置方式还有另外一个好处,原因是配置仅仅是我们所部署的文件之一。

说明:

配置文件将在第13章中详细介绍。

7. 部署

在ASP.NET中还有一个得到重大简化的领域—— 部署,它通常称为XCopy Deployment,其原因很简单—— 通常必须如此。每个ASP.NET应用程序都是自包含的,其中包括了配置文件和组件。在.NET Framework中,无需再注册组件,只需将它们复制到目标位置即可。

说明:

第13章将介绍部署的详细内容。

但是在这个部署模型中有一些例外。一个是与COM/COM+组件进行交互时,它们仍然需要注册。另一个是使用共享的程序集时,其中的.NET组件会由一个以上的ASP.NET应用程序使用。在这种情况下,组件就不能和其他ASP.NET文件保存在同一个目录中。

说明:

COM/COM+组件的互操作性将在第23章中介绍。

陈刚

本文来源:清华大学出版社

责任编辑:王晓易_NE0011

0 0