Ответ 1
Динамическое расположение макета в действии вашего контроллера:
public ActionResult Index()
{
var viewModel = ...
return View("Index", "_SomeSpecialLayout", viewModel);
}
У меня есть приложение ASP MVC, которое требует нескольких разных макетов. В ASP.NET Web Apps я бы просто сделал отдельные мастер-страницы. Как это сделать в ASP MVC 3?
До сих пор я сделал отдельный файл Layout.cshtml для каждого макета, который мне нужен.
Я попытался настроить макет в представлении, но он сбрасывается от ViewStart.cshtml, который возвращает его к макету по умолчанию для сайта.
Кроме того, я не могу заставить intellisense работать с Razor, поэтому мне не удалось изучить многое из того, что я могу сделать в ViewStart, если я могу условно установить макет или что.
Мысли?
Динамическое расположение макета в действии вашего контроллера:
public ActionResult Index()
{
var viewModel = ...
return View("Index", "_SomeSpecialLayout", viewModel);
}
Вы можете вручную настроить макет для представления, написав @{ Layout = "~/.../Something.cshtml"; }
сверху.
EDIT. Вы можете передать имя макета в качестве параметра методу View()
в контроллере.
Этот метод является самым простым способом для новичков управлять обработкой макета в вашем приложении 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".