2011-01-25 3 views
2

내 ActionFilter 속성에 액세스하고 싶습니다. 이 속성은 컬렉션입니다.asp.net mvc - 값 공급자 및 모음

보통 나는이

filterContext.Controller.ValueProvider.GetValue("Prop"); 

처럼 valueprovider를 사용하여 값에 액세스하지만이 컬렉션의 경우에는 작동하지 않습니다.

내 수집 물을 가져 오는 방법이 있습니까?

답변

4

filterContext.ActionParameters을 사용할 수 있습니다. 예 :

모델 :

public class MyViewModel 
{ 
    public IEnumerable<string> Collection { get; set; } 
} 

액션 필터 :

public class MyActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var value = filterContext.ActionParameters["model"]; 
     // TODO: do something with the value 
     base.OnActionExecuting(filterContext); 
    } 
} 

컨트롤러 :

요청
public class HomeController : Controller 
{ 
    [MyActionFilter] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(); 
    } 
} 

: /?collection[0]=foo&collection[1]=bar

+0

아주 좋은,하지만 ActionParameters가에서 사용할 수 없습니다 OnAction 실행 된 과부하. – user256034

+0

@ user256034,'OnActionExecuted'는 액션 실행이 끝난 후에 호출되므로 최근에이 정보를 검색해야하는 이유가 궁금합니다. –

+0

그리드 컨트롤의 데이터 요청입니다. 가져올 열 이름이있는 속성이 있습니다. 이 속성은 IEnumerable이 반환되는 저장소로 이동합니다. 이 IEnumerable은 뷰에 반환됩니다. 그러나 그것이 모든 것이 아닙니다. 이러한 데이터는 특수 그리드 컨트롤의 특정 XML 형식이어야합니다. actionfilter가 "IEnumerable to XML"논리를 어떻게 뒤 바꿔 놓을 수 있는지에 대해 알고 싶습니다. 하지만 action 매개 변수에서 열 이름이 필요합니다. – user256034