使用 ASP.NET 和 JavaScript 的抽象编程概念






3.67/5 (6投票s)
2006年6月9日
10分钟阅读

49389

362
这是一系列关于抽象编程的短篇文章。本部分是抽象编程的概述,以及一个程序如何以及何时编写另一个程序。
引言
这是一系列关于抽象编程的短篇文章。本系列分为三个部分。第一部分是抽象编程的概述,以及一个程序如何以及何时编写另一个程序。第二部分是 C# 代码在设计时编写 JavaScript 文件。第三部分详细介绍了抽象编程如何在运行时用于创建 JavaScript,作为 .NET DataSet
,仅存在于客户端。通过使用抽象编程,您可以消除不必要的 postbacks,并实现应用程序离线运行的可能性。
本系列使用的方法旨在创建可在所有浏览器中运行的解决方案。这些示例在 Internet Explorer 和 Netscape 中都经过了测试,但所有开发都使用 Internet Explorer 完成。示例和练习是使用 .NET 2.0 Framework、Visual Studio 2005 和 SQL Server 2005 开发的,但抽象编程的概念独立于任何特定技术。这个三部分短系列是使用本系列中描述的技术创建的。
使用源代码
下载 ZIP 文件,然后按照 Install.Readme.txt 文件中的说明将文件提取到您的 C:\Inetpub\wwwroot。按照说明设置和使用源代码以及设置浏览器。
概述
抽象编程可以描述为“一个程序编写另一个程序”。您可以在大多数 IDE 中看到这一点,例如 Visual Studio 中使用向导创建用户控件等组件时。您会注意到,IDE 根据您的输入(组件名称等)创建创建组件所需的样板代码。我将要揭示的内容更加动态,并且可以产生比单维编程更健壮的解决方案。
如何即时创建代码的问题困扰了开发人员,尤其是 Web 开发人员数十年。现在是…… .NET 编写 JavaScript – DScript 入门。DScript(一个 JavaScript 文件)应用 ASP.NET 技术以抽象面向对象的方式输出充满活力的客户端 JavaScript。DScript 和 ASP.NET 可用于为当今的复杂用户构建 Web 应用程序的应用程序框架。
JavaScript 和 .NET 协作
JavaScript 是一种面向对象的脚本语言,受所有流行 Web 浏览器支持。JavaScript 代码未编译的事实实际上使其具有平台独立性。坏消息是解释代码比编译代码慢。通常,如果它负责收集和处理数据,那将是一个问题,但我们的模型略有不同。Web 应用程序或精简客户端模型仅负责显示和提交数据。这使得服务器负责检索和格式化数据。这效果很好,因为服务器将执行编译的 .NET 代码。编译代码会产生更小、更快的任务单元,进而可以编写脚本,这些脚本会在每次页面加载时传输到客户端,并由浏览器解释。
JavaScript 有多种形式
就像在您的计算机上运行的任何其他程序一样,JavaScript 程序必须加载或安装到您的计算机上。但是,与其他程序不同,JavaScript 程序是在运行时安装的,并且无需用户交互。这提供了无缝的部署,因此已成为一种流行的编程和部署方法。在这里,我们将描述几种编写 JavaScript 程序的方法。您已经熟悉了前几个,但其余的将是您第一次接触抽象编程。下面列出了编写 JavaScript 的方法。每种方法都将详细说明其优缺点。
人工编写的静态 JavaScript
HTML
HTML 文件中的 JavaScript 是最基本的实现,也是脚本化网页最流行的样式。它有一些优点和一些缺点。以下是优缺点的快速列表
- 优点
- 易于实现
- 只有一个文件可供维护,其中包含 HTML 和 JavaScript
- 缺点
- 不可重用
- 每次加载页面时都必须下载(性能噩梦)
示例
<html>
<head>
<title>JavaScript in HTML Page</title>
</head>
<body>
<input type="button" class="Button"
value="Back" onclick="Back()" id="bBack" />
<br/>
<br/>Click a button to go back a page or forward a page.
<br/>
<input type="button" class="Button"
value="Next" onclick="Next()" id="bNext" />
</body>
<script language="'JavaScript'">
function Back()
{
alert("Back one page");
window.history.back();
}
function Next()
{
alert("Forward one page");
window.history.forward();
}
</script>
</html>
为什么不直接将 JavaScript 保留在 ASP.NET 网页中?因为它不能超出当前页面的范围。当需要相同的功能时,其他页面将需要将类似的 JavaScript 插入到 HTML 页面中。我们如何使其可重用?我们可以将其放入 *.js 文件中。
.js
现在让我们看看 *.js 文件中的人工编写的静态 JavaScript。JavaScript 文件缓存在您计算机的一个临时文件夹中。您不应直接修改此文件夹,但如果您必须知道,该文件夹位于:C:\Documents and Settings\UserID\Local Settings\Temporary Internet Files。
- 优点
- 可在任何 ASP.NET 网页中重用
- 封装,所有 JavaScript,对于特定函数或类,可以放在一个 JavaScript (*.js) 文件中
- 缺点
- 维护起来稍微困难一些,因为 JavaScript 在单独的文件中
让我们以前面的示例为例,将 JavaScript 移到一个名为 navscript.js 的文件中。现在,网页将使用 script
标签的 Src
属性引用 JavaScript 文件。
示例
<html>
<head>
<title>JavaScript in a .js File</title>
<script src="navscript.js" language="'JavaScript'"></script>
</head>
<body>
<input type="button" class="Button"
value="Back" onclick="Back()" id="bBack" />
<br />
<br />Click a button to go back a page or forward a page.
<br />
<input type="button" class="Button"
value="Next" onclick="Next()" id="bNext" />
</body>
</html>
现在,所有需要相同功能的网页都可以使用该 JavaScript。
服务器控件编写 JavaScript
本文系列的第 2 部分将详细介绍服务器如何在设计时编写静态 JavaScript 文件。这种编写发生在开发人员将控件放置到他的 .NET WebForm 上时。开发人员将控件从设计器工具箱拖放到他的 .NET WebForm 上。然后,他开始将控件移动到 .NET WebForm 上的适当位置。当他移动控件时,DScript(一个 JavaScript 文件)正在被编写以供运行时使用。这是通过将包含控件的位置、绝对位置的 DScript(一个 JavaScript 文件)写入磁盘来完成的。这就是为什么它被称为抽象编程。我们通过 Visual Studio 编写 JavaScript 来抽象生成客户端代码(DScript)的过程。更准确地说,JavaScript 是由一个 ASP.NET 服务器控件编写的,该控件的 C# 代码在设计时执行。
Web 服务器创作动态 JavaScript
本文系列的第 3 部分将详细介绍服务器如何编写动态 JavaScript 文件(DScript)。请记住,我们谈论的不是动态内容,如文本或图像。那很容易……相反,这是即时创建的代码,并且动态地传递给客户端浏览器。现在,可能性是无限的。此过程创建的 DScript 在页面加载期间加载到客户端。请清楚另一点。DScript(动态 JavaScript 文件)不限于代码,还可以包含数据。我将演示如何将数据表以 JavaScript 的形式传递到客户端计算机。
这种方法提供的功能类型如下
- 一旦 DScript 加载到客户端,直到它发生更改之前,它不会再次下载
- 您可以选择仅在需要时更新 DScript
- 您还可以为每个客户端动态创建唯一的 DScript
由于 DScript 缓存在客户端,并且 DScript 可以包含数据表,因此不再需要 postback 到服务器来获取相同的数据。
ASP.NET 中的 OO JavaScript 概念
许多人不知道 JavaScript 可以以面向对象编程的方式使用,因此他们不考虑将其用于实际的业务对象。了解这一点很重要,可以使业务对象保留在客户端,而不是服务器上。下面是一个如何创建名为 Employee
的业务对象的简短示例。在其构造函数中,它填充了一些属性,并有一个名为 displayDetails
的方法。
示例
onload = function (){ window_onload(); };
function window_onload()
{
emp1 = new Employee("Mary", "Q", "Harris", "Accounting");
emp2 = new Employee("Thomas", "O", "Williams", "Shipping");
emp1.displayDetails();
emp2.displayDetails();
}
/* Constructor function for using an Employee object.*/
function Employee(firstName, middleInitial, lastName, department)
{
this.firstName = firstName;
this.middleInitial = middleInitial;
this.lastName = lastName;
this.department = department;
}
/* defining an Employee method called
displayDetails which takes no arguments */
Employee.prototype.displayDetails = function ()
{
alert(" first name: " + this.firstName + "\r\n last name: " +
this.lastName + "\r\n department: " + this.department);
}
ASP.NET 开发和运行时环境
您可以启用调试功能,仅在 Internet Explorer 中调试 JavaScript。这可以通过在 Internet Explorer 中选择“工具”->“Internet 选项”->“高级”并取消选中“禁用脚本调试(Internet Explorer)”复选框来启用。
此外,在调试时,您应该启用脚本浏览器窗口。这可以通过在 Visual Studio 中选择“调试”->“其他窗口”->“脚本浏览器”来启用。脚本浏览器窗口将显示当前活动的脚本和页面,同时在 Web 浏览器窗口中显示网页。一旦脚本显示在脚本编辑器中,就可以轻松设置断点(按 F9 键切换断点的开启/关闭)。
运行时环境设置不需要启用调试。但是,开发和运行时环境都需要以下要求。这是一个重要的问题,因为如果浏览器设置不正确,您的 Web 应用程序将无法正常运行。
请验证浏览器是否已
- 启用 JavaScript
- 禁用页面缓存
- 启用 Cookie
通过将浏览器设置为每次访问特定网页时检查已存储页面的新版本来关闭页面缓存。在 IE 中,可以通过选择“工具”->“Internet 选项”->“常规”->“临时 Internet 文件”->“设置”->“检查已存储页面的新版本:每次访问页面”来执行此操作。
最好在依赖这些功能之前对其进行测试。一个编写良好的 Web 应用程序将执行简单的启动测试,以验证某些设置是否已正确配置。如果您正在使用弹出窗口,那么在进入实际应用程序之前,您应该做一个简单的测试来查看是否允许弹出窗口。如果此功能的测试失败,那么您应该提醒用户,如果没有该功能,应用程序将无法正常运行,并且在问题解决之前不要继续。
通过将您的网站添加到受信任站点列表,您可以绕过一些对 Web 内容施加的限制。您可能想向用户解释如何将您的网站添加到他们的受信任站点列表。在 IE 中,可以通过选择“工具”->“Internet 选项”->“安全”->“受信任的站点”来完成此操作。
这些浏览器设置对于任何类型的浏览器都是必需的:IE、Netscape 等……研究您客户浏览器的浏览器文档,以指导您的客户如何调整这些设置。
摘要
这次深入探讨是对抽象编程的介绍。它描述了几种抽象生成 JavaScript 的过程。其中一些方法是设计时方法,而另一些则可以在运行时执行。通过将 JavaScript 的生成抽象到一个在服务器上进行的过程,可以生成代码和数据。一旦数据表被下载并缓存到客户端计算机,作为 JavaScript 文件,就不需要 postback 到服务器来检索相同的数据。将 JavaScript 放入 *.js 文件中使其可重用和封装。面向对象的 JavaScript 是一种健壮且灵活的编程语言,在 Web 浏览器中执行。JavaScript 将允许其轻松抽象,因为它是一种解释型语言。此外,由于 JavaScript 可以以 OO 方式使用,因此它很适合作为业务编程语言。抽象编程是多维编程,可以描述为一个程序编写另一个程序。DScript 是动态编写的 JavaScript。