MVC 4ベースコントローラーのIndexメソッドとEditメソッドにのみ適用したいアクションフィルターがありますが、IndexメソッドとEditメソッドに適用してもアクションフィルターが起動しません。ただし、クラスレベルでフィルターを適用すると機能します。
ベースコントローラー:
//[SetAreaControllerFilter] <------ does fire here
public class BaseControllerSingle<TRepository, TViewModelSingle> : BaseController
[SetAreaControllerFilter] <----- doesn't fire here
public ActionResult IndexBase(TViewModelSingle viewModel, string pageTitle)
{
ViewBag.Header = pageTitle;
return View(viewModel);
}
ベースへの派生クラス呼び出し:
public ActionResult Index()
{
ItemViewModel viewModel = _manageItemsAppServ.CreateNewViewModel(CurrentCompanyId);
viewModel.DDLOptions = _manageItemsAppServ.CreateFilterOptionsViewModel(CurrentCompanyId);
return base.IndexBase(viewModel, "Manage Materials");
}
アクションフィルター:
public class SetAreaControllerFilterAttribute : ActionFilterAttribute, IActionFilter
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Set variable to be used by view and partials
dynamic viewBag = filterContext.Controller.ViewBag;
viewBag.AreaName = (string)filterContext.RouteData.DataTokens["area"]; //used by OTIS.Core.js to create links
viewBag.ControllerName = (string)filterContext.RouteData.Values["controller"]; //used by Toolbar adn OTIS.Core.js to create links
}
}