原文:返璞归真 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 新特性之移动特性的更多相关文章

  1. 返璞归真 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 新特性 ...

  2. 返璞归真 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 新 ...

  3. 返璞归真 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 ...

  4. 返璞归真 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 ...

  5. 返璞归真 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 上传文件, ...

  6. 返璞归真 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 ...

  7. 返璞归真 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 ...

  8. 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理

    第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...

  9. 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递

    通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...

随机推荐

  1. VSTO学习笔记(七)基于WPF的Excel分析、转换小程序

    原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然 ...

  2. MyEclipse配置启动多个Tomcat

    在实际开发中常常会遇到多个项目同一时候进行,来回切换不太方便,这时可分别部署在多个tomcat下. 改动一些配置可同一时候启动多个tomcat 一開始查阅相关文档,看到一篇文章一个Myeclipse同 ...

  3. jquery ui中 accordion的问题及我的解决方法

    原文:jquery ui中 accordion的问题及我的解决方法 jquery有一套所谓的ui组件,很不错的.如果有兴趣的朋友,可以参考http://jqueryui.com/ 但其中的accord ...

  4. Gap year | 最好金龟换酒

    Gap year | 最好金龟换酒 Gap year Posted on February 8, 2009 by 真 后.90后相比,说是虽然形成背景不同,但有很多特征相似,比如离经叛道,比如信仰缺失 ...

  5. HDU 5074-Hatsune Miku(DP)

    Hatsune Miku Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) T ...

  6. thinkphp框架的相关总结

    参考链接地址:http://gongwen.sinaapp.com/article-205.html 1. 模板中不能使用的标签 {$content} {$i} 2. If标签 如: <if c ...

  7. 关于http接口开发中json格式数据编码问题处理

    关于http接口开发中json格式数据编码问题处理 在实际工作中,接口很多时候返回json格式,但有时返回的格式会有编码问题 假设如下接口:http://service.test.com/interf ...

  8. a标签中调用js的几种方法

    1. a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且javascript:协议 ...

  9. 【JavaEE基础】在Java中如何使用jdbc连接Sql2008数据库

    我们在javaEE的开发中,肯定是要用到数据库的,那么在javaEE的开发中,是如何使用代码实现和SQL2008的连接的呢?在这一篇文章中,我将讲解如何最简单的使用jdbc进行SQL2008的数据库的 ...

  10. Android 照相功能

    使用内置的Camera 应用程序捕获图像            探索Android 所提供的内置功能,内置的图像捕获与存储功能为Android 上全部媒体功能提供了一个非常好的切入点,为我们在以后的章 ...