gpt4 book ai didi

asp.net-mvc-4 - ASP.NET MVC 4 移动功能

转载 作者:行者123 更新时间:2023-12-03 08:49:33 27 4
gpt4 key购买 nike

我正在尝试新的 ASP.NET MVC 4 移动功能。我用一个 Controller (HomeController)和一个 View (Index)制作了一个简单的应用程序。我还添加了索引 View 的移动版本。

Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml

在桌面浏览器中启动应用程序时,常规 View 会按预期显示,但是当我在 Opera Mobile Emulator 中启动应用程序时作为三星 Galaxy S,我仍然得到常规 View ,而不是移动版本。

从模拟器发送的用户代理字符串如下所示:
Opera/9.80 (Windows NT 6.1; Opera Mobi/23731; U; en) Presto/2.9.201 Version/11.50

关于为什么这不起作用的任何想法?

更新
感谢@nemesv,我能够解决这个问题,这是我目前的解决方案,希望它能涵盖大多数移动场景。
public class MobileDisplayMode : DefaultDisplayMode
{
private readonly StringCollection _useragenStringPartialIdentifiers = new StringCollection
{
"Android",
"Mobile",
"Opera Mobi",
"Samsung",
"HTC",
"Nokia",
"Ericsson",
"SonyEricsson",
"iPhone"
};

public MobileDisplayMode() : base("Mobile")
{
ContextCondition = (context => IsMobile(context.GetOverriddenUserAgent()));
}

private bool IsMobile(string useragentString)
{
return _useragenStringPartialIdentifiers.Cast<string>()
.Any(val => useragentString.IndexOf(val, StringComparison.InvariantCultureIgnoreCase) >= 0);
}
}

还有我 Global.asax
DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());

最佳答案

ASP.Net(实际上是 HttpBrowserCapabilitiesBase 类)无法将 Opera Mobile Emulator 识别为移动浏览器。

您可以在任何 Controller 操作中检查这一点:HttpContext.Request.Browser.IsMobileDevice将返回 false适用于 Opera Mobile 浏览器。

因为内置DefaultDisplayMode使用以下方法检查您需要注册的移动浏览器自定义DisplayMode正确识别 Opera Mobile。

为此,您需要将其添加到 Global.asax Application_Start :

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Mobile")
{
ContextCondition = (context => context.GetOverriddenUserAgent()
.IndexOf("Opera Mobi", StringComparison.OrdinalIgnoreCase) >= 0)
});

关于asp.net-mvc-4 - ASP.NET MVC 4 移动功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9614576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com