Вопрос

Я строю приложения MVC 3. Приложение должно иметь возможность отобразить другой макет в соответствии с подпаленом (например: customer1.mysite.com -> layout1; customer2.mysite.com -> layout2; и т. Д.) У него также будет макет для мобильных Т.е. 6.

Я видел, что это _viewstart.cshtml, которую я могу использовать, чтобы сделать логику для установки макета. Но то, чего я не понимаю, это то, где это контроль за это? Стоит ли написать весь код в представлении?

Еще один вопрос с макетом, как вывести код для общего поведения? У вас есть контрольчик для этого?

И последний я видел концепцию областей в ASP.NET MVC2, это устаревшая теперь, когда у нас есть бритва?

спасибо за помощь

Фред

Это было полезно?

Решение

Хотя вы могли бы сделать это в _ViewStart, я думаю, что лучшим способом будет написать Индивидуальный просмотр двигателя в котором на основе пользовательского агента или домена включают другой макет. Тогда у вас будут общие контроллеры и представления, только макет будет отличаться.

Другие советы

Это звучит как хорошее время для использования Viewbag.

Идея в том, что во время OnactionExecuting, вы бы посмотрели в поддоде и засунул его в Viewbag. Это можно сделать в пользовательском базовом концертлере, от которого наследуют другие ваши контроллеры, или от ActionFilter.

Затем в вашем _viewStart вы можете написать оператор Switch на Viewbag для управления макетом.

Например, здесь есть ActionFilter, который будет заполняться @ViewBag.Subdomain В любом из ваших просмотров бритвы, включая _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);
    }
}

Затем украсьте свои контроллеры этим новым [AddSubdomainToViewData] атрибут.

Наконец, в _viewstart.cshtml сделайте что -то вроде этого:

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

Это будет использовать различную компоновку бритвы для каждого поддомена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top