Направление всех действий без определенного вида на один конкретный вид - PullRequest
0 голосов
/ 06 марта 2012

Я создаю продвинутый сайт, который основан на 99% на одном просмотре.Я создал следующий код, который отвечает за то, чтобы все действия контроллеров не соответствовали универсальному представлению: ~ / Views / Shared / UniversalView.cshtml.

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    foreach (IViewEngine engine in ViewEngines.Engines)
    {
        if (engine is RazorViewEngine)
        {
            RazorViewEngine razorEngine = (RazorViewEngine)engine;
            var locationFormats = razorEngine.ViewLocationFormats;
            List<string> l = new List<string>(locationFormats);
            l.Add("~/Views/Shared/UniversalView.cshtml");
            razorEngine.ViewLocationFormats = l.ToArray();
        }
    }
}

Я уверен, что будет гораздо лучший способ добиться этого эффекта.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Вы можете объявить BaseController, и весь ваш контроллер должен наследовать от него.

Затем просто добавьте метод в BaseController, например

    public ViewResult UniversalView(string viewName="UniversalView")
    {
        return View(viewName);
    }

Из других контроллеров вы можете вызывать этот метод вместо традиционного View (). Если вы укажете имя представления, оно примет это представление, иначе по умолчанию будет универсальное представление.

    public ActionResult About()
    {
        return UniversalView();
    }
0 голосов
/ 06 марта 2012

Я бы просто использовал это представление во всех соответствующих действиях:

...
return View("UniversalView");

Но если вы действительно хотите идти своим путем.Взгляните на метод ExecuteResult ссылка и используйте его для достижения желаемого.

...