Pregunta

Estoy construyendo una aplicación MVC 3. La aplicación debe poder mostrar un diseño diferente de acuerdo con el Sub Domaine (ex: Customer1.mysite.com -> Layout1; Customer2.mysite.com -> Layout2; etc ...) También tendrá un diseño para dispositivos móviles y Es decir, 6.

He visto que es el _viewstart.cshtml que puedo aprovechar para hacer la lógica para establecer el diseño. Pero lo que no entiendo es ¿dónde está el controlador para eso? ¿Debo escribir todo el código en la vista?

¿Otra pregunta con el diseño cómo factorizar el código para los comportamientos comunes? ¿Tienes un controlador para eso?

Y un último que he visto el concepto de áreas en ASP.NET MVC2 ¿Está obsoleto ahora que tenemos Razor?

Gracias por tu ayuda

Fred

¿Fue útil?

Solución

Si bien podría hacer esto en el _viewstart, creo que una mejor manera sería escribir un Motor de vista personalizada en el cual, en base al agente de usuario o al dominio, incluyen un diseño diferente. Entonces tendría controladores y vistas comunes, solo el diseño diferirá.

Otros consejos

Esto suena como un buen momento para usar Mochila.

La idea es que durante OnActionExecuting, buscarías el subdominio y lo empujarías a la bolsa de vista. Esto se puede hacer en un controlador basado personalizado desde el cual sus otros controladores heredan, o desde un Filter de acción.

Luego, en su _viewstart, puede escribir una instrucción Switch en Viewbag para controlar el diseño.

Por ejemplo, aquí hay un Filter de Action que pueblará @ViewBag.Subdomain En cualquiera de sus vistas de afeitar, incluida _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);
    }
}

Luego, decora tus controladores con este nuevo [AddSubdomainToViewData] atributo.

Finalmente, en _viewstart.cshtml, haz algo como esto:

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

Esto utilizará un diseño de navaja diferente para cada subdominio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top