2011-12-07 11 views
5

Nel mio progetto MVC sono presenti 2 aree che sono Admin e Client e ho bisogno di configurare dinamic Layout per lato client, in _ViewStart (nel client) il file imposterà il layout per tutte le pagine del client.Cambio dinamico percorso di layout ViewStart in MVC 3

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

Quindi, se abbiamo bisogno di cambiare il layout del cliente siamo in grado di modificare il percorso del file di layout di cshtml in _ViewStart file giusto? Non riesco a trovare come modificare il file ViewStart o c'è un'altra soluzione in questo caso.

Grazie per il vostro aiuto :)

risposta

11

Ricordate che qualsiasi cosa all'interno della @{ ... } viene trattato come codice. Quindi, dovrebbe essere una semplice questione di porre una condizione in lì per cambiare come è ereditato:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    if (User.Current.IsAuthenticated) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
    } 
} 

se sei probaby meglio guardare temi (e hanno un/a tema utente amministratore). In alternativa, puoi rendere il tuo _Layout.cshtml più intelligente e far sì che gestisca le diverse visualizzazioni in base alle condizioni.

Vedere anche: MVC3 Razor - Is there a way to change the Layout depending on browser request?

6

La tua domanda non ha informazioni sufficienti per darvi un esempio di codice completo.

Ma fondamentalmente si può fare questo

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

Se ci si mostra come si determina amministratore o no, siamo in grado di fornire ulteriori informazioni.

speranza che questo aiuta

0

È possibile usufruire di nidificati layout. Creare un controller di base e guidare tutti i controller da questo.

public class ControllerBase : Controller 
{ 
    public ControllerBase() 
    { 
     ViewBag.Theme = "~/Views/Shared/Default/Views/_Layout.cshtml"; 
    } 
} 

public class HomeController : ControllerBase 
{ 
    public ActionResult Index() 
    { 

     return View(); 
    } 
} 

_ViewStart.cshtml (non apportare modifiche di questo file)

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Vista/Shared/_Layout.cshtml Questo è il file di layout predefinito di Asp.NET MVC. Svuota questo e sostituisci queste linee.

@{ 
    Layout = ViewBag.Theme; 
} 

@RenderBody() 

È possibile modificare in questo modo per le aree. Puoi recuperare le informazioni sul modello attivo in BaseController dal database o ovunque tu voglia.

Btw, se si vuole mettere le vostre opinioni al di fuori di ~/Vista Ricerca cartella per ThemeableRazorViewEngine

0

in Vista/_ViewStart.cshtml

@{  
object multiTenant; 
if (!Request.GetOwinContext().Environment.TryGetValue("MultiTenant", out multiTenant)) 
{ 
    throw new ApplicationException("Could not find tenant"); 
} 
Layout = "~/Views/"+ ((Tenant)multiTenant).Name + "/Shared/_Layout.cshtml"; 
} 
Problemi correlati