我正在嘗試新的ASP.NET MVC 4移動功能。我用一個控制器(HomeController)和一個視圖(Index)做了一個簡單的應用程序。我還添加了索引視圖的移動版本。ASP.NET MVC 4移動功能
Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml
當啓動在桌面瀏覽器應用程序的常規示意圖如圖預期,但是當我啓動在Opera Mobile Emulator作爲三星Galaxy S的應用,我仍然得到常規視圖,而不是移動版本。
從仿真器發送的用戶代理字符串看起來是這樣的:
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());
拯救生命。它真的很愚蠢,教程不會說這個。它只是從微軟方面感覺如此半屁股。他們通常與他們的教程保持一致。 – 2012-09-20 14:29:40
謝謝,雖然StringCollection似乎是有史以來最無用的類之一。它不僅沒有提供這個代碼示例中的任何內容,也不提供性能,因此您不得不編寫額外的代碼(Cast),以便使用它。用替換它,然後快樂地生活 –
PandaWood
2014-09-30 07:03:51