Подтвердить что ты не робот

ASP MVC 3 используют разные макеты в разных представлениях

У меня есть приложение ASP MVC, которое требует нескольких разных макетов. В ASP.NET Web Apps я бы просто сделал отдельные мастер-страницы. Как это сделать в ASP MVC 3?

До сих пор я сделал отдельный файл Layout.cshtml для каждого макета, который мне нужен.

Я попытался настроить макет в представлении, но он сбрасывается от ViewStart.cshtml, который возвращает его к макету по умолчанию для сайта.

Кроме того, я не могу заставить intellisense работать с Razor, поэтому мне не удалось изучить многое из того, что я могу сделать в ViewStart, если я могу условно установить макет или что.

Мысли?

4b9b3361

Ответ 1

Динамическое расположение макета в действии вашего контроллера:

public ActionResult Index()
{
    var viewModel = ...
    return View("Index", "_SomeSpecialLayout", viewModel);
}

Ответ 2

Вы можете вручную настроить макет для представления, написав @{ Layout = "~/.../Something.cshtml"; } сверху.

EDIT. Вы можете передать имя макета в качестве параметра методу View() в контроллере.

Ответ 3

Этот метод является самым простым способом для новичков управлять обработкой макета в вашем приложении ASP.NET MVC. Мы можем идентифицировать контроллер и отображать макеты в соответствии с контроллером. Для этого напишем наш код в файле _ViewStart в корневом каталоге папки "Представления". Ниже приведен пример того, как это можно сделать.

@{
  var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
  string cLayout = "~/Views/Shared/_Layout.cshtml";
  if (controller == "Webmaster") {
    cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
  }
  Layout = cLayout;
}

Прочитайте полную статью, которую я написал здесь - "Как визуализировать различные макеты в ASP.NET MVC".