Изменить расположение в контроллере в зависимости от URL - PullRequest
6 голосов
/ 21 марта 2012

У меня есть контроллер PlayerController и действия внутри: View, Info, List. Поэтому по URL "/ Player / View" я получаю результат с макетом по умолчанию.

Я хочу получить результат с другим макетом по запросу "/External/View".

Как мне этого добиться?

Ответы [ 2 ]

13 голосов
/ 21 марта 2012

Хотя вы можете переопределить компоновку с контроллера, как было предложено в другом ответе, по моему мнению, это означает, что контроллеры задействуют только * , участвующих в определении того, каким будет пользовательский интерфейс.Лучше оставить это только на усмотрение Решений.

Самое близкое к тому, о чем вы просите, это сделать в вашей текущей "~/Views/_ViewStart.cshtml":

@{
  if(Context.Request.Path.StartsWith("/External", StringComparison.OrdinalIgnoreCase))
    Layout = "~/Views/_ExternalLayout.cshtml";
  else
    Layout = "~/Views/_Layout.cshtml";
}

Где "~/Views/_ExternalLayout.cshtml"ваш альтернативный макет.

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

Если вы вставите это всуществующий _ViewStart, то любое представление, которое отображается в ответ на URL, начинающийся с "/External", будет использовать этот новый макет, в противном случае будет использоваться «нормальный».

Другой подход заключается в использовании маршрутизации.таблица для добавления значения маршрута, которое можно использовать здесь для принятия решения о компоновке;но я пошел на этот подход, чтобы сохранить его простым.

8 голосов
/ 21 марта 2012

Вы можете указать, какой макет следует использовать при возврате представления внутри действия контроллера «ExternalController».

return View("View", "~/Views/Shared/_AnotherLayout.cshtml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...