ASP.NET MVC - Установите Master View соответственно с контроллером

StackOverflow https://stackoverflow.com/questions/1418485

Вопрос

Есть ли какой-нибудь простой способ установить MasterView по умолчанию для всех действий внутри определенного контроллера?

Например, если у меня есть HomeController , я хочу, чтобы все действия внутри него наследовали Site.Master по умолчанию, но если я нахожусь внутри AccountsController Я хочу, чтобы все действия наследовали Admin.Master и т. д.

Мне удалось сделать это с:

return View("viewName", "masterName", objectModel);

Но, делая это, я должен применять его каждый раз, когда вызываю метод View.

Я искал что-то более простое, например, на рельсах, где мы можем объявить:

class HomeController < ApplicationController

  layout 'site'

   def index
   end

   def create
   ...

end

class AccountsController < ApplicationController

  layout 'admin'

  def index
  end

  def create
  ...  

end

Это возможно?

Заранее спасибо

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

Решение

Вы можете переопределить OnActionExecuting в этом классе Controller.

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ViewData["MasterfileToUser"] = "site";
}       

Или, если хотите, вы можете превратить это в ActionFilterAttribute, который вы можете применить к контроллеру или уровню действия

using System;
using System.Web.Mvc;
public class MasterFileFilterAttribute : ActionFilterAttribute
{
    public string Master { get; set; }

    public override void OnActionExecuted( ActionExecutedContext filterContext)   
    {        
            if (filterContext.Result is ViewResult)
                    ((ViewResult)filterContext.Result).MasterName = Master;
    }
}

который вы затем, в свою очередь, используете следующим образом:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
}   
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top