2017-01-25 3 views
0

В нашем приложении ASP.NET Core у нас есть несколько ролей, мы хотим, чтобы каждая роль имела свой собственный макет, для этого мы придумали идею раздельного макета для каждой роли:Несколько макетов в ASP.NET MVC Core

~/Views/Shared/Layouts/_DefaultLayout.cshtml 
~/Views/Shared/Layouts/_Role_1_Layout.cshtml 
~/Views/Shared/Layouts/_Role_2_Layout.cshtml 
~/Views/Shared/Layouts/_Role_3_Layout.cshtml 
~/Views/Shared/Layouts/_Role_4_Layout.cshtml 

для переключения между этими ролями мы изменяем ~/Views/_ViewStart.cshtml к этому:

@{ 
    if (this.User.IsInRole("Role1")) 
    { 
     Layout = "~/Views/Shared/Layouts/_Role_1_Layout.cshtml"; 
    } 
    else if (this.User.IsInRole("Role2")) 
    { 
     Layout = "~/Views/Shared/Layouts/_Role_2_Layout.cshtml"; 
    } 

    // .... 

    else 
    { 
     Layout = "~/Views/Shared/_DefaultLayout.cshtml"; 
    } 
} 

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

Любая идея?

+0

Вы используете соответствующий макет при переключении? Например, если вы устанавливаете точки останова на каждом из макетов = ... и вы начинаете переключать роли, вы хотя бы нажмете на соответствующий макет, который вы ожидаете? Если это сработает, то вы можете хотя бы устранить это. Если нет, то это может помочь найти другой угол для решения проблемы. О, и, переключившись ... вы имеете в виду логин/выход из системы и переключение? Или что-то другое? – Vlince

ответ

0

Похоже, вы подгоняете «еще», но есть ошибка на пути?

Layout = "~/Views/Shared/_DefaultLayout.cshtml";

Вероятно, должно быть:

Layout = "~/Views/Shared/Макеты/ _DefaultLayout.cshtml";

Я не являюсь причиной вашей проблемы, не могли бы вы обменять репо на ваш код или хотя бы рабочий пример?