介绍
现今移动设备已成为我们生活中的一部分,我们当中的许多人已离不开它们。当这些移动设备连接到Internet时,移动设备的力量将无穷无尽。我们可以在任何时间地点给用户发送数据。典型的移动应用程序是在服务器上使用WML, WMLScript和WBMP开发的。
对于动态WML应用程序,开发者可以使用ASP, JSP, PHP等等。移动设备包括蜂窝电话、寻呼机、掌中浏览器、袖珍PC和车载PC。这些设备中少数支持WML,少数支持HTML,更少数支持同时支持WML和HTML。如果你想确保你的应用程序能在大多数的移动设备中使用,你必须以WML和有限的HTML创建应用程序。
最近Microsoft提出了一个革命性的应用程序开发平台—.NET 框架。.NET 框架包括用于Web开发的ASP.NET(下一版本的ASP)。基于ASP.NET的Web开发即支持传统的Web客户端如IE和Netscape,又支持移动客户端如Phone.com, Nokia 蜂窝电话和袖珍PC。ASP.NET应用程序可以在任何.NET支持的语言环境下如VB.NET(下一版本的VB),JScript, C++, C#等等语言环境下进行开发。在这篇文章中,我们将看到如何使用.NET Mobile Web SDK, ASP.NET和 VB.NET看法移动应用程序。
.NET介绍
在深入之前,我想给你简要地介绍一下.NET。.NET是一个由Microsoft在2000年专业开发者会议上提出的发展中的开发平台。下面的图表展示了.NET 框架应用程序开发的简单结构。
当一个ASP.NET的页面请求从一个Web客户端如IE或移动设备发出时,IIS会收集请求并把它传递给.NET 框架。如果ASP.NET的页面是首次请求,那么.NET 框架将把ASP.NET编译成中间语言(intermediate language,IL)。然后IL代码将被即时(Just-In-Time,JIT)编译器编译成本地代码。就象你所看到的,.NET 框架是整个ASP.NET应用的核心。.NET 框架将提供必须的资源和你所选择由于编译代码的语言编译器。
开发所必须的条件
要使用.NET开发移动应用程序,你必须下载和安装如下的组件。IE和.NET SDK可以从 Microsoft MSDN site 免费下载。
1. Windows 2000 Professional/Server/Advanced Server OS
2. Internet Explorer 5.5
3. .NET framework Beta 1
4. .NET Mobile Web SDK Beta 1
5. WAP模拟器
让我们开始吧!
要使用.NET开发移动应用程序,必须包含由.NET Mobile Web SDK提供(通过MobileUI.DLL文件)的 Mobile Web名域(System.Mobile.UI)。对于那些对namespace(名域)一词感到陌生的人来说,名域就象C++的头文件和Visual Basic的引用。名域将提供开发应用程序所要求的类。
使用.NET 框架开发移动应用程序是很容易的。
1. 创建一个ASP.NET页面
2. 包含Mobile Web Namespace--System.Mobile.UI
3. 用Mobile控件设计页面
就是那么简单。
Mobile 控件
Mobile控件是为开发移动应用程序而设计好的程序块。对于那些喜欢使用象VB和Frontpage等这样的集成开发环境(IDE)来开发GUI/Web的人来说,Mobile 控件就与HTML的按钮控件和VB的Grid控件相类似。Mobile控件通过提供程序员所需要的功能来简化程序的开发过程。
例如,如果你想画一个WML Card标记符,你可以使用Mobile Form控件。对于所有的WML标记符都提供了相应的Mobile 控件。Mobile 控件吸引人之处就在于,它们不仅限用于WML标记符;相反,它们超越了WML标记符,可以创建有用的Mobile 控件,如在WML无法实现的日历Mobile 控件。
让我们看一看一个显示“Hello World!”的ASP.NET页面例子。
〈%@ Page Inherits="System.Mobile.UI.MobilePage"〉
〈%@ Register TagPrefix="Mobile" Namespace="System.Mobile.UI"〉
〈Mobile:Form runat="server"〉
〈Mobile:Label runat="server"〉Hello, World!〈/Mobile:Label〉
〈/Mobile:Form〉
循序渐进—理解ASP.NET页面
1. 在第一行里,给ASP.NET页面对象继承了Mobile Web名域。如果不这样做,ASP.NET就会遵循普通Web应用程序的页面处理程序。
2. 在第二行里,为Mobile Web名域注册了一个标记符前缀。你可以看到在剩下的代码中,对所有的Mobile 控件都使用“Moblie”这个关键字作为名域前缀。你可以使用任何你想的名字作为标记符前缀。
3. 在第三行里,创建一个Mobile窗体并把它的runat属性设置为server。
4. 在第四行里,创建一个Mobile label控件和“Hello World”文本。
5. 最后一行,关闭Mobile窗体标记符
运行以上例子,观看结果。
以上就是例子在Phone.com模拟器显示的效果。现在再让我们看一看ASP.NET生成的代码:
是不是很Cool?ASP.NET为我们生成代码,Mobile Form控件已经被转换为WML card标记符;同样地,Mobile Label控件被转换为WML paragraph标记符。
让我们看一看在Pocket IE中又会怎样:
再让我们看一看ASP.NET为Pocket IE生成的代码:
〈html〉
〈body〉
〈form id="ctrl1" name="ctrl1" method="post" action="Exp1.Aspx?631169274439268880"〉
〈div〉Hello, World!〈/div〉
〈/form〉
〈/body〉
〈/html〉
ASP.NET为Pocket IE生成HTML代码。的确,Mobile 控件有能力探测到所使用的浏览器并生成所支持的代码。所以,当在WAP模拟器中打开一个ASP.NET页面时得到的是WML代码。而在袖珍PC中打开时得到HTML代码。这样就给我们开发一次服务任何移动设备的能力。很Cool,不是吗?
移动应用程序设计概念
NET Mobile Web SDK提供了三个容器对象:MobilePage, Form 和Panel。MobilePage控件是移动应用程序的重要容器。一个单独的MobilePage可以有一个或多个Form控件。一个Form控件可以有0个或多个Panel控件。Panel控件用于给各种Mobile控件分组。
.NET Mobile Web SDK 中Mobile控件
Mobile控件可以被分为三个主要的组。它们是用户界面(UI)控件,验证(Validation)控件和功能(Utility)控件。用户界面控件是如Lable控件一样允许用户控制用户界面的一组控件。验证控件允许我们验证用户的输入如RequiredFieldValidator控件,这些控件在向服务器发送数据之前验证用户输入的数据。功能控件是诸如日历控件这一类的控件。
以下表格展示了以上各个类别的控件。
UI控件
控件名描述Command一个Command控件执行诸如提交信息之类的动作FormForm控件是一个或多个mobile控件的容器Image在移动设备中显示图象Label在移动设备中显示输出文本Link在窗体中创建一个超链接List在移动设备中显示一个选项列表MobilePage控制所有mobile控件的容器TextBox显示单行的文本框Textview显示多行的文本框
验证控件
控件名描述CompareValidator比较两个mobile控件CustomValidator自定义的检验器允许从控件中调用自己的检验过程RangeValidator限制检验器在一个范围内检测数据RegularExpressionValidator检测与控件指定的表达式不符的数据RequiredFieldValidator检测用户在这一区域输入的数据ValidationSummary显示一个所有发生的检验过程的报告
功能控件
控件名描述Call拨打一个电话号码Calendar显示一个日历AdRotator随机显示一个广告
自动分页是.NET Mobile Web SDK的优势之一。.NET远行时会处理目标设备的页面显示问题。对于不同的Mobile控件会采取不同的分页处理形式。例如,对于List控件,分页由该控件的PageSize属性处理。这个属性根据目标设备自动设置。当在运行时显示页面时,panel控件里的控件就会呆在一起。
一个简单的例子
让我们写一个简单应用程序,显示一个文本框接受输入并在下一个窗体中显示。
〈%@ Page Inherits="System.Mobile.UI.MobilePage" %〉
〈%@ Register TagPrefix="mobile" Namespace="System.Mobile.UI" %〉
〈Script language="VB" runat="server"〉
Sub Btn_OnClick(Src As Object, E As EventArgs)
‘move to the next mobile form
ActiveForm = frm2
‘display the name.
EnteredName.Text = "Your name is: " & YourName.Text
End Sub
〈/Script〉
〈mobile:Form id="frm1" runat=server〉
〈mobile:Label runat=server〉Your Name:〈/mobile:Label〉
〈mobile:TextBox runat="server" id="YourName" /〉
〈mobile:Command runat="server" id="btn" OnClick="Btn_OnClick"〉Ok
〈/mobile:Form〉
〈mobile:Form id="frm2" runat=server〉
〈mobile:Label runat="server" id="EnteredName" /〉
〈/mobile:Form〉
在以上的代码中,创建了两个窗体。第一个窗体的id为frm1, 第一个窗体的idfrm2。之所以使用这个方法是因为Mobile Form控件不支持name属性,而支持id属性。ASP.NET运行时就是通过这样的方法来确认窗体的。在第一个窗体中,添加了一个lable控件,一个textbox控件和一个button控件。当点击button时,服务器端的VB子程序(Btn_OnClick)就被调用。这对于那些熟悉VB的人来说就象在家里一样亲切。在处理VB子程序的事件里,通过给frm2设置ActiveForm方法来跳到下一个窗体。然后访问定义在frm2中lable控件并设置用户提交的值。
以下就是以上代码在Phone.com模拟器和Pocket IE模拟器中的显示屏幕: