質問

万が一、特定のコントローラー内のすべてのアクションにデフォルトの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

それは可能ですか?

事前に感謝

役に立ちましたか?

解決

そのControllerクラスでOnActionExecutingをオーバーライドできます。

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