<?php $hello = "hi how are you\n";
echo $hello;
?
>
<% Dim Hello As String = "Hi how are you" & vbcrlf
Response.Write(Hello)
%>
然而,这些用于向浏览器发送输出的方法主要是为了保持与传统 ASP 的向后兼容性。ASP.NET 提供了新的基于控件且面向事件的模型,您只需在服务器控件上设置属性即可将数据输出到浏览器中。通过这种技术可以将布局与代码清楚地分开,从而简化了维护工作,并且在复杂情况下所需的代码要比 PHP 少得多。
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
TheDate.Text = DateTime.Now
End Sub
</script>
The current date is: <asp:Label id="TheDate" runat="server"/>
此示例声明了一个名为 TheDate 的服务器端标签 (Label) 控件,并在该页面的 Load 事件中将此标签的 Text 属性设置为当前的日期和时间。此代码的 HTML 输出与其他两个版本相同,不同的是 Label 控件将自身呈现为 span 标记(其中包含所设置的任何标签文本)。 条件处理 IF/ELSE
PHP 具有若干条件处理表达式,例如 for、while、switch 和 foreach,但最常用的是 if/else 表达式。Visual Basic .NET 有几个非常类似的构造,其语法也很类似。表 5 对 PHP 和 Visual Basic .NET 中的等价条件逻辑进行了比较。 表 5:基本条件逻辑
PHP Visual Basic .NET
if ($a > $b) { print "a is bigger than b";
} elseif ($a == $b) {
print "a is equal to b";
} else {
print "a is smaller than b";
}
If a > b Response.write ("a is bigger
than b")
ElseIf a = b Then
Response.write ("a is equal to
b")
Else
Response.write ("a is smaller
than b")
End If
切换
切换语句是大多数编程语言的常见语言构造,用于通过多个值对单个表达式进行测试。它常用于替换包含多个 elseif/else 块的 if 语句。
图 6 对 PHP 的 switch 语句与 Visual Basic 的 Select Case 语句进行了比较。 表 6:switch 与 select case 语句的对比
PHP Visual Basic .NET
switch ($i) { case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
default:
print "i is not equal to 0,
1 or 2";
}
Select Case Number i Case 0
description = "0"
response.write ("i equals 0")
Case 1
description = "1"
response.write ("i equals 1")
Case 2
description = "2"
response.write ("i equals 2")
Case Else
description = " i is not equal
to 0, 1 or 2"
response.write ("i is not
equal to 0, 1 or 2 ")
End Select
Dim myCollection As New Collection()
然后,您可以使用 Add 方法向集合中添加成员。在此示例中,我们创建了四个字符串并将它们添加到集合中。您还可以选择添加一个唯一的 String 值作为集合成员的主键。该值作为 Add 方法的第二个参数传递给集合。
Dim w, x, y, z As String
w = "key1"
x = "key2"
y = "key3"
z = "key4"
myCollection.Add(w, "1")
myCollection.Add(x, "2")
myCollection.Add(y, "3")
myCollection.Add(z, "4")
虽然这看起来类似于在 PHP 中创建关联数组,但集合是一种截然不同的事物,因为它本身就是一个对象。对于转到 ASP 的 PHP 开发人员,我们建议在尝试在 Visual Basic.NET 中创建关联数组模型之前先了解一下 Microsoft 的 Visual Basic .NET Language Specification。 管理状态
任何 Web 应用程序中都很常见的一个任务就是管理状态,该任务通常是使用 Cookie 或应用程序状态管理构造(如 Session 变量)来完成的。Visual Basic .NET 具有与 PHP 类似的用于处理状态的方法。 设置和检索 Cookie
在这两种环境中设置 Cookie 都是比较繁琐的。表 11 显示了在这两种语言中编写然后读取 Cookie 的示例。 表 11:设置和检索 Cookie
PHP Visual Basic .NET
<?php $value = 'something from
somewhere';
setcookie ("TestCookie",
$value,time()+3600); /*
expire in 1 hour */
?>
and to retive the set cookie
<?
echo $_COOKIE["TestCookie"];
?>
Dim value as string = "something from somewhere"
Dim myCookie As New HttpCookie = New
HttpCookie("Something from
somewhereTestCookie")
Dim now as DateTime = DateTime.Now
myCookie.Value = now.ToString()value
myCookie.Expires = now.AddHour(1)
Response.Cookies.Add(myCookie)
'and to retrieve the set cookie
Response.Write(Request.Cookies["What we
setTestCookie"}.Value}
<script runat="server"> Sub Page_Load(Sender As Object, E As
EventArgs)
Dim myConnection As New
SqlConnection("server=(local)\NetSDK;
database=mydb;Trusted_Connection
=yes")
Dim myCommand As New
SqlDataAdapter("select * from
mytable", myConnection)
Dim ds As New DataSet()
myCommand.Fill(ds, "myDataset")
myDataGrid.DataSource = myDataset
myDataGrid.DataBind()
End Sub
</script>
<%--- 输出结果 ---%>
<form runat="server">
<asp:DataGrid id="myDataGrid"
runat="server" />
</form>
ASP.NET 数据缓存为编程人员提供了许多不同的方法来管理应用程序并提高应用程序的响应速度和效率。有关详细信息,请参阅 Cache Class 文档以了解 Cache 对象。 发送电子邮件
PHP 和 ASP.NET 都为以编程方式发送电子邮件提供了内置的支持。要在此示例中使用 ASP.NET 发送电子邮件,您需要设置 IIS SMTP 服务。因为 .NET 中的内置邮件对象依赖于该服务包含的对象,所以您必须安装它。尽管如此,与 PHP 一样,.NET 也允许您使用任何 SMTP 服务器或邮件服务器。表 14 对这两种环境的基本语法进行了比较。 表 14:发送电子邮件
PHP Visual Basic .NET
$to = "test@atnoaddress.com"; $from =
"me@nosuchaddress.com";
$subject = "hi";
$message = "just wanted to say
hi";
mail($to,$subject,$message,
$from)
Dim myMail As MailMessage = New MailMessage()
myMail.From = "me@nosuchaddress.com"
myMail.To = "test@atnoaddress.com"
myMail.Subect = "hi"
myMail.Body = "just wanted to say hi"
SmtpMail.Send(myMail)
XML 处理和 Web 服务
在 PHP 中,为分析和处理 XML 所提供的内置支持功能非常薄弱。虽然开发人员可以用它来分析和处理 XML,但它不支持 DOM 分析(该分析尽管比 PHP 的 SAX 分析器速度慢,但更容易使用)。PHP 也不支持根据 DTD 或 XML SCHEME 对 XML 文档进行本地验证,它也不支持 XSL/XSLT 以及市场上许多 Web 应用程序常用的各种其他技术。虽然 PHP 可以通过很多 PHP 软件包完成许多与 XML 相关的任务,但 .NET 和 ASP.NET 为处理 XML 提供了广泛的内置支持。XML 是 .Net 平台的核心技术之一。有关 Web 服务的详细信息,请参阅 How ASP.NET Web Services Work。
.NET Framework 为 W3C 定义的所有 XML 建议提供了广泛的支持,此外还支持 XSL/XSLT、XPath、XQuery 以及各种其他技术,例如用于 Web 服务的 UDDI、WSDL 以及 SOAP。
虽然可以在 PHP 中创建 XML-RPC 类型的机制,但创建 Web 服务(使开发人员能够使用常用协议和标准来交换数据和过程并将其用于查找、数据绑定和描述)。.NET 为 Web 服务和相关技术(如 SOAP、WSDL 和 UDDI)提供了广泛的支持。使用 .NET,开发人员还可以轻松地创建和开发 Web 服务。例如,以下代码将创建一个简单的 hello world Web 服务:
Dim myHelloWorld As New HelloWorld()
Dim sReturn As String = myHelloWorld.SayHelloWorld()
这就是创建一个简单 Web 服务的全过程。有关 XML 的一般信息以及 Web 服务的特定信息,请参阅 Employing XML in the .NET Framework。
小结
对于简单的小型应用程序,从 PHP 迁移到 ASP.NET 通常并不复杂。对于更复杂的应用程序,由于基础体系结构的不同以及 ASP.NET 的 OOP 模式,需要进行事先规划和精心设计,以利用 ASP.NET 提供的将显示与逻辑和数据明确分开的功能,以及可以节省时间的内置功能。与 PHP 相比,这些功能可以显著减少完成相同任务所需的代码数量。
建议的后续操作
现在您已经初步了解了 ASP.NET,接下来请尝试以下操作:
下载 Web Matrix。Web Matrix 是一个用于开发 ASP.NET 应用程序的免费工具。它附带了一个演示教程和预先创建的模板,向您展示了如何完成常见的任务,例如连接数据库以及以表的形式返回结果。您可以从 The ASP.NET Web Matrix Project 下载 Web Matrix。
访问 PHP-ASP.NET Migration Forum。Microsoft 和 ASP.NET 社区的 ASP.NET 小组成员将解答您提出的各种问题。
查看 ASP.NET Starter Kits。ASP.NET Starter Kits 是一组预先创建的示例应用程序(包括电子商务站点和门户等),其中提供了完整的源代码供您使用。
资源
ASP.NET QuickStart Tutorial 提供了 Visual Basic.NET 和其他语言中的 ASP.NET 教程。