Я пытаюсь использовать новые функции 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<string>()
.Any(val => useragentString.IndexOf(val, StringComparison.InvariantCultureIgnoreCase) >= 0);
}
}
И я Global.asax
DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());