MVC3 Razor - Есть ли способ изменить макет в зависимости от запроса браузера? - PullRequest
4 голосов
/ 29 ноября 2010

Я успешно следовал этому руководству: http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx

Все представления успешно воспроизводятся, когда я захожу на страницу с мобильного устройства.Но они отображаются с неправильной компоновкой (главная страница AKA).

У меня есть следующая структура: /Views/Shared/Mobile/_Layout.cshtml /Views/Shared/_Layout.cshtml

проблема в том, что я должен поместить следующее утверждение в КАЖДОЕ представление:

Layout = "~/Views/Shared/Mobile/_Layout.cshtml";

Есть ли место, где я могу разместить свою логику для рендеринга одного макета на другой?

if (normalAccess) нормальный рендеринг _Layout.cshtml else (mobileAccess) рендеринг /Mobile/_Layout.cshtml

Я не смог найти где.

Спасибо за любую помощь.

1 Ответ

7 голосов
/ 29 ноября 2010

Там хорошая статья на http://weblogs.asp.net/scottgu/archive/2010/10/22/asp-net-mvc-3-layouts.aspx

Вы, очевидно, можете создать файл в папке \ Views с именем _ViewStart.cshtml, в который можно поместить логику макета, которая будет использоваться всеми представлениями

Пример _ViewStart.cshtml просто:

@{
    Layout = "~/Views/Shared/SiteLayout.cshtml";
}

В статье также говорится: «Поскольку _ViewStart.cshtml позволяет нам писать код, мы можем при желании сделать нашу логику выбора Layout более богатой, чем просто базовый набор свойств. Например: мы могли бы изменить шаблон макета, который мы используем, в зависимости от того, какой тип устройства обращается к сайту - и иметь оптимизированный макет телефона или планшета для этих устройств, а также макет, оптимизированный для настольных компьютеров / ПК.

Возможно, вам придется потренироваться, чтобы это заработало, однако у меня нет установки для установки в 2010 году, чтобы попробовать это.

...