Теперь это можно выполнить с помощью встроенной функции ASP.NET MVC (начиная с версии 4), которая называется " DisplayModes "
По умолчанию ASP.NET MVC поставляется с двумя встроенными режимами отображения. Есть режим отображения по умолчанию, который отображает ваши «стандартные» представления, как это всегда было, и также есть общий «мобильный» режим отображения.
Это работает, определяя, является ли клиентское устройство мобильным браузером или нет (что само по себе определяется путем перехвата строки User-Agent клиентского устройства, поэтому не на 100% надежной). Если устройство определено как мобильное устройство, то фактическое представление MVC, которое отправляется клиенту, переопределяется, и вместо этого отображается и отправляется альтернативное представление. В случае включенного режима мобильного дисплея он настроен на просмотр вида с суффиксом .mobile.cshtml
вместо .cshtml
(как показано на скриншоте ниже)

Это позволяет вам проектировать совершенно разные представления, которые будут отправляться на мобильное устройство по сравнению с немобильным устройством, не требуя любых изменений в логике вашего контроллера, поэтому вам не нужно включать никакую условную логику там.
Если вам требуется более детальный контроль над точным представлением, отправляемым на клиентское устройство, вся функциональность режимов отображения настраивается и расширяется. Вы можете определить свои собственные режимы отображения (обычно выполняемые при запуске приложения), которые могут быть специфичными для данного браузера, данного устройства или любого произвольного определения, которое вы пожелаете. Все они основаны на строке агента пользователя, поступающей с клиентского устройства.
Рассмотрим следующий фрагмент кода, который показывает добавление 3 дополнительных пользовательских режимов отображения для Windows Phone, iPhone и Android в методе запуска приложения:
protected void Application_Start()
{
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("WP")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("Windows Phone OS",StringComparison.OrdinalIgnoreCase) >= 0)
});
DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});
DisplayModeProvider.Instance.Modes.Insert(2, new DefaultDisplayMode("Android")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0)
});
}
Каждому режиму отображения присваивается идентификатор и строка для сопоставления из строки агента пользователя, чтобы определить, следует ли использовать этот режим отображения. Если это так, DisplayModeProvider будет искать представление с тем же строковым суффиксом. (т.е. для режима отображения iPhone выше, мы ожидаем найти строку «iPhone» в любом месте строки пользовательского агента, и, если она существует, мы используем этот режим отображения, который отображает представления с суффиксом iphone.cshtml
, а не .cshtml
суффикс.
Подробнее об этой функции вы можете прочитать здесь:
http://www.asp.net/mvc/overview/older-versions/aspnet-mvc-4-mobile-features
в частности, в разделах «Переопределение видов, макетов и частичных видов» и «Видов, специфичных для браузера».