asp.net-mvc – ASP.NET MVC使用相同的控制器分离移动视图
|
我正在使用ASP.NET MVC 3 w / Razor开发一个新项目,并开发同一站点的2个不同视图,完整版和移动版.使用相同控制器的最佳实践/方法是什么,但是根据用户代理显示不同的视图?我应该在控制器中处理这个吗?看起来每个控制器操作中的if语句检查用户代理然后根据其设备返回不同的视图是麻烦的,冗余的,容易出错的. 解决方法现在可以使用ASP.NET MVC的内置功能(从版本4开始)称为“ DisplayModes”来实现默认情况下,ASP.NET MVC内置两种显示模式.有默认的显示模式,它可以像往常一样呈现您的“标准”视图,还有一个通用的“移动”显示模式. 这通过检测客户端设备是否是移动浏览器来工作(其本身通过嗅探客户端设备的User-Agent string来确定,因此不是100%可靠).如果确定设备是移动设备,则覆盖发送到客户端的实际MVC视图,并且呈现并发送替代视图.在包含移动显示模式的情况下,它被配置为查找后缀为.mobile.cshtml而不是.cshtml的视图(如下面的屏幕截图所示) 这允许您设计完全不同的视图,这些视图将被发送到移动设备与非移动设备,而无需对控制器逻辑进行任何更改,因此您不需要在其中包含任何条件逻辑. 如果您需要对发送到客户端设备的确切视图进行更细粒度的控制,则整个显示模式功能是可配置和可扩展的.您可以定义自己的显示模式(通常在“应用程序启动”中执行),这些模式可以特定于给定的浏览器,给定设备或您希望的任意定义.所有这些都基于来自客户端设备的用户代理字符串. 请考虑下面的代码片段,其中显示了在Application Start方法中为Windows Phone,iPhone和Android添加3个其他自定义显示模式: protected void Application_Start()
{
DisplayModeProvider.Instance.Modes.Insert(0,new DefaultDisplayMode("WP")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("Windows Phone OS",StringComparison.OrdinalIgnoreCase) >= 0)
});
DisplayModeProvider.Instance.Modes.Insert(1,new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("iPhone",StringComparison.OrdinalIgnoreCase) >= 0)
});
DisplayModeProvider.Instance.Modes.Insert(2,new DefaultDisplayMode("Android")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("Android",StringComparison.OrdinalIgnoreCase) >= 0)
});
}
为每个显示模式提供ID和要与用户代理字符串匹配的字符串,以确定是否要使用此显示模式.如果是,则DisplayModeProvider将查找具有相同字符串后缀的View. (即对于上面的iPhone显示模式,我们希望在用户代理字符串中的任何位置找到字符串“iPhone”,如果存在,我们使用这种显示模式,使用iphone.cshtml后缀而不是.cshtml后缀呈现视图. 您可以在此处阅读有关此功能的更多信息 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net jQuery Ajax用户登录功能的实现
- asp.net-mvc-3 – MVC中的SSO(单点登录)
- asp.net – 有浏览器相当于IE的ClearAuthenticationCache?
- asp.net – SqlException(0x80131904):第28行:(‘.)附近的
- asp.net – 作为MVC路径参数的文件路径
- asp.net-mvc – MVC Razor获取月份名称
- 手动转换ASCII和.NET字符
- ASP.NET本地化与单数和复数
- asp.net-mvc-3 – 将数组传递给RouteValues,并将其渲染为粘
- asp.net – Page_ClientValidate()与多个ValidationGroups
- asp.net-mvc – 对HTTP POST请求的正确响应是什么
- asp.net – 如何在Web应用程序中使用ServiceStac
- 在asp.net中的web.config的位置元素中有多个路径
- 是否可以优化ASP.NET WebForms以便像ASP.NET MVC
- asp.net – 诸如Eval(),XPath()和Bind()的数据绑
- asp.net – WebFormsMVP的缺点?
- asp.net-mvc – 使用JSON,JQuery向ASP.NET MVC C
- asp.net-mvc-3 – 如何防止ASP.NET MVC应用程序中
- asp.net-mvc – 自定义DateTime模型绑定在Asp.ne
- ASP.NET – 构建自己的路由系统
