Я опробую новые функции ASP.NET MVC 4 Mobile. Я сделал простое приложение с одним контроллером (HomeController) и одним представлением (индекс). Я также добавил мобильную версию представления индекса.
Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml
При запуске приложения в настольном браузере отображается обычное представление, как и ожидалось, однако, когда я запускаю приложение в Opera Mobile Emulator как Samsung 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());