Укажите разные _Layout.cshtml в зависимости от контроллера - PullRequest
3 голосов
/ 07 апреля 2011

Я создал проект asp mvc3, я хочу иметь другой _Layout.cshtml в зависимости от того, какой контроллер выбран. Это связано с тем, что в контроллере 1 имеется 2 кнопки, в контроллере 2 - 3, а в контроллере 3 - 4. Каждый контроллер предназначен для определенного типа пользователя, поэтому это зависит от имени пользователя.

Как связать контроллер и его представления с другим Layout.cshtml, сейчас есть один макет, и он находится в папке Shared.

Спасибо!

Ответы [ 2 ]

11 голосов
/ 07 апреля 2011

Вид должен определять макет, а не контроллер.

Контроллер должен просто определить, какое представление возвращается.

Тогда в верхней части вашего представления вы можете указать макет. Вы можете добавить оператор If вокруг него, чтобы изменить его на основе ваших данных

@{
    if(ViewBag.someValue)
       Layout = "~/Views/Shared/_Layout.cshtml";
    else
        Layout = "~/Views/Shared/_otherLayout.cshtml";
}
1 голос
/ 28 июля 2016

На данный момент, так как другой немного устарел и с mvc 5, я знаю, что у вас будут некоторые проблемы с отсутствием скобок. Если вы хотите использовать представление для выполнения логики, вот более полный ответ.

Контроллер

public ActionResult Index()
{
    ViewBag.Admin = 1;
    return View();
}

Вид

@{

    if (ViewBag.Admin == 1)
    {
        Layout = "~/Views/Shared/_AdminLayout.cshtml";
    }
    else
    {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

}
...