一起谈.NET技术,现有ASP.NET MVC框架应用巧妙移植到手机

简介:   客户对产品质量非常满意,因此在项目完成后又给我们另外一个订单,即部署客户程序到Windows智能手机设备上。但是我们项目团队成员以前都没有这种开发经验。我们的计划是通过最小限度的修改现有程序代码,使其可以运行在Windo智能手机上。


  客户对产品质量非常满意,因此在项目完成后又给我们另外一个订单,即部署客户程序到Windows智能手机设备上。但是我们项目团队成员以前都没有这种开发经验。我们的计划是通过最小限度的修改现有程序代码,使其可以运行在Windo智能手机上。

       移动设备Web应用工具箱(WebApplicationToolkitforMobileDevices)
  我们选择了微软移动设备Web应用开发工具箱作为解决方案。使用这个免费的工具,可以轻松将基于MVC框架的Web应用扩展到移动设备上。

下载地址:
  http://code.msdn.microsoft.com/WebAppToolkitMobile/Release/ProjectReleases.aspx?ReleaseId=3914
  该移动应用开发工具箱所需的环境要求是:
  1、安装微软.NETFramework3.5SP1。
  2、VisualStudio2008专业版或更高版本。你也可以下载免费的微软VisualWebDeveloper2008Express版。
  3、如果你的操作系统是WindowsXP,则需要安装同步软件MicrosoftActiveSync,以实现开发环境和设备模拟器之间的同步。
  4、ASP.NETMVC框架,该框架也是免费的,你可以从MSDN或CodePlex上下载。
  5、WindowsMobileSDK6.0或更高版本。默认情况下,该SDK没有模拟器映像文件,你可从以下地址下载:
  http://www.microsoft.com/downloads/details.aspx?FamilyID=1A7A6B52-F89E-4354-84CE-5D19C204498A&displaylang=en

      在安装了Web应用开发工具箱后,它将在你指定的位置创建一个名为WebAppToolkitMobile的文件夹。打开WebAppToolkitMobile\VisualStudioTemplates文件夹,双击MobileWebApplication.vsi文件,将在VS2008中创建一个新MobileApplication模板项目。打开你的VS2008,并从“我的模板”分类中选择MobileWebApplication项目模板,并将你的项目命名为“TestMobileWebApplication”。另外根据向导要求增加一个单元测试项目。


  看下解决方案浏览器,它将有三个不同的项目。第一个项目名为“MobileCapableViewEngie”,它是一个类库型项目,其输出为一个主项目引用的程序集(.dll文件)。在运行时中,这个程序集将根据浏览器和设备类型来决定展现哪一个视图。


  举例来说,如果你想在你的asp.net应用中显示一个员工列表,而且你也希望为手机应用浏览器创建一个相同的列表,那么你需要创建两个不同的视图。其中一个视图供IE浏览器使用,而另一个则是为手机网络浏览器所准备。你还可以为手机浏览器创建定制化的视图,因为手机和PDA显示屏可能非常小。在多数情况下,开发者将为手机应用创建定制化的视图。MobileCapableViewEngine类的ViewEngineResult函数确定运行时展现哪一个视图。

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)         
 {              
ViewEngineResult result = null;              
HttpRequestBase request = controllerContext.HttpContext.Request;              
 if (request.Browser.IsMobileDevice)              
{                 
 string mobileViewName = string.Empty;                   
mobileViewName = string.Format(                                          CultureInfo.InvariantCulture,                                          
"Mobile/{0}/{1}",                                          
this.RetrieveDeviceFolderName(request.Browser.Browser),                                          
viewName);                   
result = this.ResolveView(controllerContext, mobileViewName, masterName, useCache);                   
if (result == null || result.View == null)                  
{                     
 mobileViewName = string.Format(                                              CultureInfo.InvariantCulture,                                             
 "Mobile/{0}",                                              
viewName);                       
result = this.ResolveView(controllerContext, mobileViewName, masterName, useCache);                  
}              
}                            
if (result == null || result.View == null)              
{                  
result = this.ResolveView(controllerContext, viewName, masterName, useCache);             
 }               
return result;          
}           
protected virtual ViewEngineResult ResolveView(ControllerContext controllerContext, string          
 viewName, string masterName, bool useCache)          
{              
return base.FindView(controllerContext, viewName, masterName, useCache);         
 } 


  那么接下来,是要在Global.asax文件的Application_Start事件中登记所有设备和浏览器类型。MobileCapableViewEngine程序集配置了两个默认设备文件夹映射:其中的一个是针对iPhone,被映射到View\Home\Mobile\iPhone文件夹,另一个是针对Windows手机,被映射到View\Home\Mobile\WindowsMobile文件夹。在RegisterViewEngines函数中添加实例到引擎集合之前,开发者可以通过修改MobileCapableWebFormViewEngine类的DeviceFolders属性,来实现删除或增加新文件夹映射。请看以下代码片段。

 publicstaticvoidRegisterViewEngines(ViewEngineCollectionengines)
  {
  varengine=newMobileCapableWebFormViewEngine();
  engine.DeviceFolders.Clear();
  engine.DeviceFolders.Add("PocketIE","WindowsMobile");
  engine.DeviceFolders.Add("AppleMAC-Safari","iPhone");
  engine.DeviceFolders.Add("Safari","iPhone");
  engines.Clear();
  engines.Add(engine);
  }


   移植现有ASP.NET应用到手机
  一旦设备和视图的登记完成,拷贝粘贴现有ASP.NETMVC框架应用(你希望移植到手机的项目)到TestMobileWebApplication项目中。反之,你也可以增加MobileCapableViewEngine程序集到你现有MVC项目中,以进行必要的修改。
  下面我将用到之前使用MVC框架2.0创建的员工管理应用。这个应用有四个视图:创建员工、编辑现有员工数据、显示所有员工数据和显示特定员工数据。在这之前我已经把员工管理应用中所有相关文件拷贝到TestMobileWebApplication项目中,并对RegisterViewEngine函数进行了必要的修改。另外我还针对手机设备创建了新的定制化视图,并增加了一些针对手机应用的新管理页面。我还在Content文件夹下创建了分别针对普通浏览器和手机浏览器的不同CSS文件。而且我对应用程序增加了错误处理功能。在增加了所有必需的组件后,如下图所示。


  在控制类中还需要进行另一处改动,此前对于任何Http请求,你的应用程序代码需要将其重定向到特定视图,现在你需要调用MobileCapableViewEngine类的FindView函数,这个函数能够识别浏览器类型,并将你的请求重定向到相应的定制化视图。
  使用模拟器测试你的应用
  MicrosoftMobileSDK6.0已经安装了相关模拟器。为了测试你的应用,首先你需要设置设备管理器和模拟器。双击设备模拟器管理程序(dvcemumanager.exe),它的存放路径为:C:\ProgramFiles\MicrosoftDeviceEmulator\1.0。


  如果你的本地系统是WindowsXP,你还需要配置MicrosoftActivesync。右键点击Windows任务栏上的ActiveSync图标,并选择“OpenMicrosoftActiveSync”,从文件菜单中选择连接设置。参考图4设置你的ActiveSync连接。然后在设备模拟器管理工具中选择“MobileClassicEmulator”并右键点击,选择连接选项。这样将会打开WindowsMobileClassicEmulator,首次打开可能需要40-45秒时间。右键点击运行的模拟器管理工具映像,并选择Cradle选项激活ActiveSync,你将会看到一个同步向导界面。


  不要选择向导中的任何选项,点击完成。现在我们已经可以在WindowsMobileEmulator中测试应用。该模拟器如下图所示。


  现在回到VisualStudio编辑器中,按F5执行该Web应用。下图显示了普通IE浏览器中的已有员工列表。


  要想在微软系统手机浏览器中显示相同的员工列表,我使用了一个定制化视图,只显示员工信息的部分内容。如下图所示:


  通过ASP.NETMVCFramework,我们可以灵活的向项目中增加新定制化视图模板。借助于文本模板转换工具箱(TextTemplateTransformationToolkit),你可以最大限度的定制你的ASP.NETMVC现有视图模板。
  

目录
相关文章
|
2天前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
2天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
2天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
2天前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
58 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
47 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
122 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
189 0

相关实验场景

更多