返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性
原文:返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性
作者:webabcd
介绍
asp.net mvc 之 asp.net mvc 4.0 新特性之移动特性
- 为不同的客户端提供不同的视图
- 手动重写 UserAgent,从而强制使用对应的视图
示例
1、演示如何为不同的客户端提供不同的视图
Global.asax.cs
/*
* 为了更好地支持移动设备,mvc 4.0 带来了一些新的特性
*
* 本 demo 演示如何方便地为不同客户端提供不同的视图
*/ using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.WebPages; namespace MobileFeature
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// 为 windows phone 客户端新增加一个名为 wp 的显示模式
DisplayModeProvider.Instance.Modes.Insert(, new DefaultDisplayMode("wp")
{
// 设置判断 windows phone 客户端的条件
ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
("Windows Phone", StringComparison.InvariantCultureIgnoreCase) >= )
}); /*
* 显示模式可以方便地为不同客户端提供不同视图
* 默认 DisplayModeProvider.Instance.Modes 有两种显示模式,分别是 Mobile 和 ""
*
* 以 Home/Index.cshtml 为例
* 1、windows phone 客户端访问会使用 Index.wp.cshtml 视图
* 2、其他移动客户端访问会使用 Index.Mobile.cshtml 视图
* 3、不符合以上两个条件的客户端访问会使用 Index.cshtml 视图
* 注:找不到对应的视图时,会默认使用 Index.cshtml 视图
*/ AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
Index.cshtml
@{
ViewBag.Title = "主页";
}
<h2>@ViewBag.Message</h2>
<p>
若要了解有关 ASP.NET MVC 的详细信息,请访问 <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>。
</p>
<h1>为非移动设备提供的页面</h1>
<ul data-role="listview" data-inset="true">
<li data-role="list-divider">导航</li>
<li>@Html.ActionLink("关于", "About", "Home")</li>
<li>@Html.ActionLink("联系方式", "Contact", "Home")</li>
</ul>
<script type="text/javascript">
alert("是否是移动设备:@Request.Browser.IsMobileDevice.ToString()");
</script>
Index.wp.cshtml
@{
ViewBag.Title = "主页";
}
<h2>@ViewBag.Message</h2>
<p>
若要了解有关 ASP.NET MVC 的详细信息,请访问 <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>。
</p>
<h1>为 windows phone 提供的页面</h1>
<ul data-role="listview" data-inset="true">
<li data-role="list-divider">导航</li>
<li>@Html.ActionLink("关于", "About", "Home")</li>
<li>@Html.ActionLink("联系方式", "Contact", "Home")</li>
</ul>
<script type="text/javascript">
alert("是否是移动设备:@Request.Browser.IsMobileDevice.ToString()");
</script>
Index.Mobile.cshtml
@{
ViewBag.Title = "主页";
}
<h2>@ViewBag.Message</h2>
<p>
若要了解有关 ASP.NET MVC 的详细信息,请访问 <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>。
</p>
<h1>为非 windows phone 的移动设备提供的页面</h1>
<ul data-role="listview" data-inset="true">
<li data-role="list-divider">导航</li>
<li>@Html.ActionLink("关于", "About", "Home")</li>
<li>@Html.ActionLink("联系方式", "Contact", "Home")</li>
</ul>
<script type="text/javascript">
alert("是否是移动设备:@Request.Browser.IsMobileDevice.ToString()");
</script>
2、演示如何手动重写 UserAgent,从而强制使用对应的视图
ViewSwitcherController.cs
/*
* 演示如何手动重写 UserAgent,从而强制使用对应的视图
*/ using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.WebPages; namespace MobileFeature.Controllers
{
public class ViewSwitcherController : Controller
{
public ActionResult SwitchView(bool? mobile)
{
mobile = mobile ?? false; // 重写 UserAgent
HttpContext.SetOverriddenBrowser(mobile.Value ? BrowserOverride.Mobile : BrowserOverride.Desktop);
// HttpContext.SetOverriddenBrowser(string userAgent); return View();
}
}
}
SwitchView.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>非移动设备</title>
</head>
<body>
<h2>非移动设备</h2>
<!--判断重写后的 UserAgent-->
@if (ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice)
{
// ViewContext.HttpContext.GetOverriddenUserAgent()
@: Displaying mobile view
@Html.ActionLink("Desktop view", "SwitchView", "ViewSwitcher", new { mobile = false }, null)
}
else
{
@: Displaying desktop view
@Html.ActionLink("Mobile view", "SwitchView", "ViewSwitcher", new { mobile = true }, null)
}
</body>
</html>
SwitchView.Mobile.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>移动设备</title>
</head>
<body>
<h2>移动设备</h2>
<!--判断重写后的 UserAgent-->
@if (ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice)
{
// ViewContext.HttpContext.GetOverriddenUserAgent()
@: Displaying mobile view
@Html.ActionLink("Desktop view", "SwitchView", "ViewSwitcher", new { mobile = false }, null)
}
else
{
@: Displaying desktop view
@Html.ActionLink("Mobile view", "SwitchView", "ViewSwitcher", new { mobile = true }, null)
}
</body>
</html>
OK
[源码下载]
返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性的更多相关文章
- 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性
原文:返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 [索引页][源码下载] 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 ...
- 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性
[索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...
- 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller
原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller [索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net ...
- 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model
原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc ...
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...
- 返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor)
原文:返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor) [索引页][源码下载] 返璞归真 asp.net mvc (9) - asp.ne ...
- 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...
- 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...
随机推荐
- 【机器学习】SVM核函数
知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2. Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...
- 怎么制作U盘系统/PE启动盘
原地址:http://jingyan.baidu.com/article/3c48dd3453d05de10be358fb.html 不用光驱就能启动系统,做一个U盘启动系统就搞定,下面我给大家演示如 ...
- java Process在windows的使用汇总(转)
最常用的是ant(java工程中流行),maven,及通用的exec(只要有shell脚本如.sh,.bat,.exe,.cmd等).而其实前两者不容易出错,后者却遇到了以下问题:Caused by: ...
- 1T文件夹 - 微云
1T文件夹 - 微云 1T文件夹
- 使用和制作patch文件
使用和制作patch文件 发表时间: 2007-2-13 20:57 作者: superuser 来源: 迷茫人 字体: 小 中 大 | 打印 原文http://www.linuxsir. ...
- WeText项目的服务端
WeText项目的服务端 在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 wi ...
- poj2411(状压dp)
题目链接:http://poj.org/problem?id=2411 题意:由1*2 的矩形通过组合拼成大矩形,求拼成指定的大矩形有几种拼法. 分析:如果是横着的就定义11,如果竖着的定义为竖着的0 ...
- I2C分析三
1 引言 IIC (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备.它是同步通信的一种特殊形式,具有接口线少.控制方 ...
- 【Ruby】Ruby的model学习——Active Record Associations
在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801@qq.com QQ:1494713801 一.怎样定义关联 两个model之间经常会存在关联关系,为了解决这些关联引起的复 ...
- sql语句查询数据库中的表名/列名/主键/自动增长值
原文地址:http://blog.csdn.net/pukuimin1226/article/details/7687538 ----查询数据库中用户创建的表 ----jsj01 为数据库名 sele ...