我已經制作了我的mvc網站(.mobile視圖)的移動版本,並且它可以與移動設備配合使用,但是當模擬ipad時,它也使用.mobile版本。設置MVC爲IPad設計使用常規web版本,而不是.mobile
我該如何告訴mvc它應該選擇ipad設計的網頁和其他非移動設備的常規版本?
我已經制作了我的mvc網站(.mobile視圖)的移動版本,並且它可以與移動設備配合使用,但是當模擬ipad時,它也使用.mobile版本。設置MVC爲IPad設計使用常規web版本,而不是.mobile
我該如何告訴mvc它應該選擇ipad設計的網頁和其他非移動設備的常規版本?
這聽起來像MVC4一個已知的bug
有一個修復 - 升級到MVC5或安裝以下NuGet包: Install-Package Microsoft.AspNet.Mvc.FixedDisplayModes
進一步閱讀有關的NuGet包。 http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes
進一步閱讀有關的bug:http://forums.asp.net/t/1840341.aspx,http://aspnetwebstack.codeplex.com/workitem/280
我們可以通過將在全球Application_Start
方法如下固定這一點。
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode()
{
ContextCondition = (context => context.Request.UserAgent != null && context.GetOverriddenUserAgent().IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >= 0)
});
這告訴MVC使用iPad設備的默認視圖而不是移動視圖。
其實我們有配置文件中列出的「排除設備」列表。
// For each excluded device, set to use the default (desktop) view
foreach (var excludedMobileDevice in ExcludedDevices)
{
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode()
{
ContextCondition = (context => context.Request.UserAgent != null && context.GetOverriddenUserAgent().IndexOf(excludedMobileDevice, StringComparison.OrdinalIgnoreCase) >= 0)
);
}
此外,在我們的應用程序,我們有一個要求禁用所有的通過一個單一的配置設置移動視圖(無需移除所有移動視圖文件)。這使我們能夠根據需要打開和關閉移動視圖。再次在Application_Start
中,我們找到並刪除ID爲「Mobile」的顯示模式。
// Remove the built in MVC mobile view detection if required
if (!MobileViewEnabled)
{
var mobileDisplayModeProvider = DisplayModeProvider.Instance.Modes.FirstOrDefault(d => d.DisplayModeId == "Mobile");
if (mobileDisplayModeProvider != null)
{
DisplayModeProvider.Instance.Modes.Remove(mobileDisplayModeProvider);
}
}
我已經升級到MVC 5,但它仍然返回移動版本,以Ipad :( – MikeAlike234