2014-07-25 2 views
0

만들기 사용자 정의는 LayoutAttribute라고하고 ActionResult에 추가 :은 내가 ActionFilterAttribute을 만든 ActionFilterAttribute

컨트롤러 :

[Layout(PageType.Department,"dnr")] 
    public ActionResult Kd(string mainBody, int dnr) 
    { 

LayoutAttribute :

using System.Web.Mvc; 
using Komplett.Infrastructure.NInject; 
using Ninject; 


namespace Minion.Services.PageState 
{ 
    public class LayoutAttribute : ActionFilterAttribute 
    { 
    private readonly PageType _pageType; 
    private readonly string _pageIdName; 

    public LayoutAttribute(PageType PageType,string PageIdName = "") 
    { 
     _pageType = PageType; 
     _pageIdName = PageIdName; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var pageStateModel = KernelContainer.Kernel.Get<PageStateModel>(); 
     if (filterContext.ActionParameters.ContainsKey(_pageIdName ?? "")) 
     { 
      pageStateModel.PageId = (string)filterContext.ActionParameters[_pageIdName]; 
     } 
     pageStateModel.PageType = _pageType; 
    } 
} 

가}

문제는 OnActionExecuting이 호출되지 않습니다. 또한 global.asax.cs에 특성을 등록하려고했지만 매개 변수없는 생성자가 필요했습니다. 이것을 작성하여 global.asax.cs에 다음과 같이 추가했습니다.

GlobalFilters.Filters.Add(new LayoutAttribute()); 

행운을 불렀습니다.

내가 뭘 잘못하고 있니? 어떻게 MVC 호출 OnActionExecuting 만들 수 있습니까?

+0

글로벌 필터. 귀하의 필터를 개입시키고 페이지를 재지향하는 다른 필터가없는 것이 확실합니까? – Tallmaris

+0

여기에 표시된 것과 같은 속성을 사용하십시오. http://stackoverflow.com/questions/4348071/how-to-pass-parameters-to-a-custom-actionfilter-in-asp-net-mvc-2. 대부분의 경우 기본 생성자가 아닌 생성자는 지원되지 않습니다. –

+0

컨트롤러에 놓으면 어떻게됩니까? –

답변

0

조금 현혹 될 수 있도록, 당신이

System.Web.Mvc.ActionFilterAttribute 

하지

System.Web.Http.Filters.ActionFilterAttribute 

그들은 모두 OnActionExecuting 및 OnActionExecuted 방법을 구현하고 있는지 확인

당신은 등록 할 필요가 없습니다