Domanda

I m la costruzione di un MVC 3 applicazioni. L'applicazione dovrebbe essere in grado di visualizzare un formato diverso a seconda del sub domaine (es: customer1.mysite.com -> Layout1; customer2.mysite.com -> Layout2; ecc ...) avrà anche un layout per cellulari e IE 6.

ho visto che la loro è la _ViewStart.cshtml che posso sfruttare per fare la logica per impostare il layout. Ma quello che non capisco è dove è il controler per questo? Dovrei scrivere tutto il codice nella vista?

Un altro problema con il layout come fare voi fattore fuori il codice per i comportamenti comuni? Avete un controler per questo?

E un ultimo che ho visto il concetto di aree in asp.net MVC2 è obsoleta adesso che abbiamo rasoio?

Grazie per il vostro aiuto

Fred

È stato utile?

Soluzione

Mentre si potrebbe fare questo nel _ViewStart penso che il modo migliore sarebbe quello di scrivere un personalizzato vista motore in cui basato sul programma utente o il dominio includono un layout diverso. Poi si avrebbe controller comuni e punti di vista, solo il layout sarà diverso.

Altri suggerimenti

Questo suona come un buon momento per l'uso ViewBag .

L'idea è che durante OnActionExecuting , si dovrebbe cercare il sottodominio e spingerlo nella ViewBag. Questo può essere fatto in un BaseController personalizzato da cui gli altri controller ereditano, o da un ActionFilter .

Poi, nel vostro _ViewStart, è possibile scrivere un'istruzione switch su ViewBag a disposizione dei comandi.

Per esempio, qui è un ActionFilter che popoleranno @ViewBag.Subdomain in uno qualsiasi dei vostri punti di vista Razor, tra cui _ViewStart.cshtml.

public class AddSubdomainToViewDataAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var subdomain = filterContext.HttpContext.Request.Url.Authority.Split('.').First();
        var controller = filterContext.Controller as Controller;
        controller.ViewData.Add("Subdomain", subdomain);
    }
}

Poi, decorare i controller con questo nuovo attributo [AddSubdomainToViewData].

Infine, in _ViewStart.cshtml, fare qualcosa di simile:

@{
    Layout = "~/Views/Shared/" + ((@ViewContext.ViewData["Subdomain"] as String) ?? String.Empty) + "_layout.cshtml";
}

In questo modo utilizzare un layout Razor diverso per ogni sottodominio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top