ASP.NET MVC - 使用Controller相应地设置主视图

zan*_*ona 5 .net asp.net-mvc controller view master

有机会,有没有简单的方法为特定控制器内的所有操作设置默认的MasterView?

例如,如果我有HomeController,我希望其中的所有操作都默认继承Site.Master,但如果我在AccountsController中,我希望所有操作都继承Admin.Master等等.

我成功地做到了:

return View("viewName", "masterName", objectModel);
Run Code Online (Sandbox Code Playgroud)

但是通过这样做,我每次调用View方法时都必须应用它.

我正在寻找一些更简单的东西,我们可以声明:

class HomeController < ApplicationController

  layout 'site'

   def index
   end

   def create
   ...

end

class AccountsController < ApplicationController

  layout 'admin'

  def index
  end

  def create
  ...  

end
Run Code Online (Sandbox Code Playgroud)

那可能吗?

提前致谢

oll*_*lle 6

您可以在该Controller类中重写OnActionExecuting.

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ViewData["MasterfileToUser"] = "site";
}       
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意,可以将其转换为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你反过来使用它:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
}   
Run Code Online (Sandbox Code Playgroud)