日期:2008-07-11  浏览次数:20556 次

Microsoft的.NET版本能够使你在一组非常宽泛的平台上开发和部署你的应用程序。比如,你可以通过ASP.NET的mobile控件(以前被称为Microsoft Mobile Internet Toolkit)在智能电话(smartphone)及其他小屏幕设备上部署你的Web应用程序。为了同.NET的策略保持一致,ASP.NET mobile控件试图将设备的差异隐藏起来并使你专著于你的商务逻辑。我将讲解如何将一个简单的应用程序从ASP.NET转化到mobile ASP.NET中去,以及需要进行哪些改变来使应用程序适合于mobile Web。

我构建了一个能够对上中西部地区(upper Midwest)的一些所选城市进行天气预报的简单Web应用程序,我们将对它进行转换。这些用于天气预报的数据是完全随机的。(使用随机的天气预报和当地的真实预报情况一样准确。我们刚刚在两天之内从一个温度高达65度的地方来到有六英尺积雪的地方。)我将向你介绍这个程序的设计情况以便使你了解如何对你自己的程序进行改进。该程序包括两个VS.NET项目――WeatherLib和 WeatherSite。WeatherLib中包含中间层逻辑。你可以创建一个Forecast对象并通过索引器(indexer)来读取预报数据。这个程序在form中是通过ASP.NET Repeater控件来读取未来10天的天气预报数据的,其中DataBinder.Eval()方法用于为描述每个预报元素的属性返回一个格式编排好的字符串。

现在你就可以将这个程序转化为ASP.NET mobile控件了。在转化的过程中,我将存在于WeatherLib的中间层和存在于WeatherSite的显示层分开了,虽然这只是一个很小的例子。你也应该在你的程序中进行同样的处理。我还没有让你看到代码分离类(code-behind class)中的代码,因为那里还没有写什么代码。代码分离类用于创建中间层对象以及对它们的属性进行查询。

你可能会采用将移动用户导向不同网站的策略。通过VS.NET向导来创建一个新的项目,在C#一栏下选择"ASP.NET Mobile Web Application"。VS.NET会新建一个带有单一页面的程序,就和通常的ASP.NET程序完全一样。但生成的文件是有一些差别的。首先,web.config中会包括两个新的区域(section)――MobileControls和DeviceFilters。MobileControls中包含一个Key来支持cookieless数据目录。这个设置说明目录内容会被存储到一个query string中以使session及验证过程能够在移动设备中正常运行。deviceFilters区域比较大,它用于为ASP.NET提供一些功能来创建特定设备的内容。如果你有特定设备的内容,你就必须添加或修改这个区域。在大多数情况下,该区域的缺省设置已经足够用了。

接下来的两处不同位于ASPX页面以及用于页面的代码分离器中。它们都引用了System.Web.UI.MobileControls命名空间,而不是System.Web.UI.Controls命名空间。两个命名空间的相似之处会对你在新的领域中提高ASP.NET技巧有所帮助。

在完成向导之后,你必须在这个新的项目中实现你自己的显示层,包括引用WeatherLib项目以便使新的mobile Web项目能够访问共享的中间层。然后,开始添加这个mobile控件使用户可以选取和浏览他们所选的天气预报情况。在form中放置一个下拉列表框好让用户选择他们想要的城市。添加一个按钮来加载新城市的天气预报。然后,下拉ObjectList控件来显示该预报。

封装ObjectList
剩下需要做的事就是将ObjectList封装起来以便看到form中的天气预报。ASP.NET中的ObjectList似乎是Repeater和DataGrid类的混合体。它包含一个概要视图和一个详细视图。概要视图用于显示列表中每个值的一个属性;详细视图则会显示列表中一个索引的所有字段。你可以用不同的视图来保存屏幕空间。在这个程序中,你将显示每种天气预报的日期,使用户能够选取他们最感兴趣的那一天的数据。他们能够通过点击日期来查看该天的详细信息。在代码中,你需要用labelField属性来指定用于概要视图的每个数据元素所在字段。

Field元素用于指定详细列表中字段的映射值。你必须手动添加这些代码,因为ObjectList控件不支持在VS.NET属性窗口中添加这些字段。注意在VS.NET 2003最终beta版的文档中包含两个错误。它将DataFormatString属性作为FormatString列出了,而且如果你指定自己的格式和字段映射,则AutoGenerateFields一定会失败;另外,显示的每个字段中会出现两个相同的值。

修改好页面之后,你要在代码分离类中的Page_Load事件处理中添加代码来创建Forecast对象并将它绑定到ObjectList中:forecaster = new
WeatherForecast (City);

ForecastDisplay.DataSource =
forecaster;
if (!IsPostBack)
ForecastDisplay.DataBind ();




一旦你在ASPX页面和代码分离类中添加了这些项目之后,你就可以在浏览器中看到这个页面了。你已经将你的程序移植到mobile Web中了。

移植到mobile控件和在一个真实的移动设备中测试你的网站两回事。或许你有一个很不错的网站,但是在你处理移动电话的form factor和大小时,你得到的却是一个不那么有用的程序。Microsoft Mobile Explorer (MME) Emulator能够帮你找到这些问题。该测试还不能完全确保你的程序能够运行于所有可能的设备中,尤其不能担保你所创建的指定设备的内容。你可以把它当作对电话form factor的一个底线测试。

在下载并安装了这个仿真程序之后,你必须将它配置到你的项目中。通过两个步骤将它添加到VS.NET环境中。首先,将MME添加到浏览器列表中。你可以通过File | Browse With?command,选择Add按钮并将它导航到MME浏览器中。它会被缺省安装到%Program Files%\Microsoft Mobile Explorer\ 3.0\Emulator\mmeemu.exe文件中。即便在你安装好之后,你的程序还是会将IE作为缺省浏览器。因此第二步,你必须对该项目的属性进行编辑。右击Solution Explorer 中的项目节点并选中Properties,选择Debugging节点并将"Always Use Internet Explorer"设置为False。现在当你启动程序时,它就会显示在Mobile Explorer Emulator 中了。

通过这个简单的ASP.NET mobile控件介绍,你大概已经了解如何将ASP.NET程序移植到mobile Web中了,它能够适用于所有用户。关键问题是你提高了现有的ASP.NET知识,因为其架构都是相同的;只是一些控件稍有差别。你可以通过将商务逻辑层同显示层分离来减少转向到移动设备的代码量。否则mobile控件就会和一般的ASP.NET控件一样了。如果你对ASP.NET程序很熟的话,你将会非常得心应手。