Я пробую новые мобильные функции ASP.NET MVC 4. Я сделал простое приложение с одним контроллером (HomeController) и одним представлением (Index). Я также добавил мобильную версию индексного представления.
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()
.Any(val => useragentString.IndexOf(val, StringComparison.InvariantCultureIgnoreCase) >= 0);
}
}
And i Global.asax
DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());