移动支持 – ASP.NET MVC 4 系列
目前,有各种各样的方法可以提高网站应用程序的移动体验。在某些情况下,我们只想在小规格上做一些微小的风格变化;另一些情况下,我们可能完全改变外观显示或者一些视图的内容;最极端的情况下,我们可能重新创建一个专门针对移动用户的 Web 应用程序。针对这些情况,MVC 4 提供了如下几种方案:
- 适应性呈现:默认的 Internet 和 Intranet 应用程序模板使用 CSS 媒体查询(CSS media queries)来缩小到较小的移动规格(mobile form factors)。
- 显示模式:MVC 4 采用了基于约定的方法,可以根据发出请求的浏览器选择不同的视图。与适应性不同,显示模式允许我们改变发往移动浏览器的标记!
- Mobile Project 模板:这个新的项目模板帮助创建只针对移动设备使用的 Web 应用程序。
适应性呈现

MVC 4 默认模板在移动浏览器中做了很多处理,显而易见,页面智能的根据移动设备屏幕尺寸进行缩放,而不是简单的缩小页面尺寸(收缩文本和其他元素),为了能在移动设备上使用,页面进行了重绘。页面利用的是两个普遍支持的浏览器功能:
Viewport 元标记:
基于浏览器嗅探或用户选择,Viewport 标记只在那些专门为小规格设计的页面中使用。这种情况下,我们按如下方式使用 Viewport 标记:
<meta name="viewport" content="width=320" /> // 不适用于大尺寸页面
一个更好的解决方案是把我们的 CSS 扩展到各种规模,然后告诉浏览器支持任意设备!这很容易实现:
<meta name="viewport" content="width=device-width" />
CSS 媒体查询的自适应样式:
我们已经告诉浏览器页面足够智能,可以自动缩放到当前设备的屏幕尺寸。但如何兑现这一承诺呢?答案是 CSS 媒体查询。CSS 媒体查询允许我们在特定的媒体(显示)功能指定 CSS 规则,CSS 规则进行自上而下的评估,我们可以在 CSS 文件的顶部应用一般的规则,用专门在 CSS 中进行小规格显示的规则进行重写,并且媒体查询环绕这些规则,以使它们不能在大规格显示的浏览器中使用。
列举一个非常简单的示例,当宽度大于 850px 的屏幕上显示时,背景是蓝色,否则红色。CSS 如下:
body {
background-color: blue;
}
@media only screen and (max-width:850px) {
body {
background-color: red;
}
}


显示模式
MVC 4 中的视图逻辑已经改变,添加了基于约定的替代视图。当浏览器用户代理显示是一个已知的移动设备时,默认的视图引擎首先查找名称以 .Mobile.cshtml 结尾的视图。例如,桌面浏览器请求主页时,应用程序使用 Views\Home\Index.cshtml 模板,而当移动浏览器请求主页时,程序就会使用 Views\Home\Index.Mobile.cshtml 模板。这些都由约定来处理,我们不必配置或注册。
(这里不方便测试就不贴图了,有兴趣的朋友可以下载移动浏览器模拟器来启动项目自行测试)
Mobile Project 模板
如果需要创建只针对移动浏览器使用的应用程序,可以使用 Mobile Site 模板来创建新应用程序。该模版为我们创建的网站预先配置使用 JQuery Mobile 库,这个库为移动 Web 应用程序提供了大量增强功能:
- 用户界面采用触摸优化的 UI 小部件
- 为主要的移动浏览器而设计,并通过了测试
- Ajax 导航提供了动画页面过渡,使其在低带宽的情况下,依然保持良好的性能
- 通过主题支持,我们可以使用 CSS 主题重置整个网站的皮肤
- 列表视图使用移动友好的接口,为浏览和操纵信息列表提供了很好的用户体验

Mobile Project 模板可以开发强大的 JQuery Mobile ASP.NET MVC 应用程序,但这需要深入了解 JQuery Mobile。可以参考一些学习资料:
- JQuery Mobile 网站:http://jquerymobile.com,这里有大量资料,其中包括文档、演示、主题构建支持
- ASP.NET 网站上的 ASP.NET MVC 4 Mobile Features 教程详细的介绍了如何构建移动会议网站,提供了构建完整应用程序的资源。如果需要,可以下载运行:http://www.asp.net/mvc/tutorias/mvc-4/aspnet-mvc-4-mobile-features
移动支持 – ASP.NET MVC 4 系列的更多相关文章
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)
该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...
- ASP.NET MVC学习系列(二)-WebAPI请求
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- ASP.NET MVC学习系列(二)-WebAPI请求(转)
转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...
- ASP.NET MVC 入门系列教程
ASP.NET MVC 入门系列教程 博客园ASP.NET MVC 技术专题 http://kb.cnblogs.com/zt/mvc/ 一个居于ASP.NET MVC Beta的系列入门文章,有朋友 ...
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
- ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- 简介 – ASP.NET MVC 4 系列
正所谓好记性不如烂笔头,尤其是技术类书籍在阅读后,时间久了一定会忘记.而重新翻阅整本书也较为低效,遂以博客记录阅读摘要以供日后查阅.本系列文章均摘要自 Wrox 红皮书[ASP.NET ...
- ASP.NET MVC深入浅出系列
一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模式,ViewState功不可没,通过的控件的拖拽和绑 ...
随机推荐
- Outlook不能预览和打开Excel文件:
无法打开Outlook邮箱中的Excel附件,确实让人恼火 先不要着急: 1.在开始->运行,输入"regedit" 2.找到路径:HKEY_CURRENT_USER\Sof ...
- IOC和Aop使用的扩展
下面还有静态代理和动态代理 1.构造注入 lib包: 在entity包下新建一个实体类User 代码: package cn.happy.entity; public class User { pri ...
- android自定义按键
android自带菜单键.返回键.搜索键的重写 转自:http://blog.sina.com.cn/s/blog_7cb9b3b801015yk8.html 返回键 public void on ...
- hdu 2088
ps: 超级超级水的一道题....就是格式问题要注意... 除了第一个数据,其他的每个数据都要有个空行比如: 4 1 2 3 4 3 4 //这是空行 1 2 3 4 3 4 //这是空行 代码: ...
- Git简单应用(1)
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 1.Windows安装git msysgit是Windows版的Git,从https://git-for-windows. ...
- 可编辑的div元素去除粘贴复制带来的额外样式,实现纯文本粘贴
$(function(){ var update = function(original){ var new_content = $('.testmr').html(); var new ...
- 微信小程序开发技巧及填坑记录
以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...
- Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)
一.实际项目中有很多如下界面效果. 二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码: <!DOCTYPE html> <html> & ...
- webclient的简单实用
这是我在项目中调用别人写好的接口口是使用的1.简单的url传参 List<ArticleModel> result = new List<ArticleModel>(); st ...
- SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存
SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存.这通常指示其它内存已损坏.(System.Data). 而登录本地数据库实例则能顺利登入,不存在上述问题. 试一试重置 ...