2

각 페이지에서 사용할 수 있어야하는 viewData이 있습니다. 이 ViewDataonActionExecuting을 사용하여 기입하십시오. 부분 페이지의 actionresult에 대해서도 모든 작업에 대해 채워집니다. ViewData가 각 페이지로드마다 한 번만 채워지 길 원합니다. 보기 b를 반환하는 결과가 기본보기 또는 부분보기는 그 기반으로하는 경우 어떤 제안모든 작업에 대해 ViewData를 채우지 만 렌더링에는 적용되지 않습니다.

답변

2

당신을 ViewData에 정보를 추가할지 여부를 결정한 OnActionExecuting 이벤트 및 테스트를 사용할 수 있습니다

public class MyActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if (filterContext.Result is ViewResult) 
     { 
      filterContext.Controller.ViewData["foo"] = "bar"; 
     } 
    } 
} 

모든보기에서 사용할 수있는 공통 데이터를 가질 수있는 또 다른 가능성은 별도의 하위 작업으로 외부화하고 Html.Action helper을 사용하여 예를 들어 레이아웃에 포함시킬 수 있습니다.

+0

filterContext.Result에 null이 표시됩니다. 나는 두 번째 접근법을 생각하고 있었는데 트릭을 할 수 있는지 보자. – Tassadaque

+0

@ Tassadaque, null은 무엇입니까? 'filterContext'? 또는'filterContext.Result'? 또는 다른 것? 정확한 코드는 어떻게 생겼습니까? 컨트롤러 동작은 어떻습니까? ? {System.Web.Mvc.ActionExecutingContext} ActionDescriptor : {System.Web –

+0

filterContext.Result 내가 얻을 filtercontext의 null {System.Web.Mvc.ActionExecutingContext} 기본 {System.Web.Mvc.ControllerContext을} filterContext .Mvc.ReflectedActionDescriptor} ActionParameters은 = 7 결과 개수 : actionFilterAttribute { 공공 재정의 무효 OnActionExecuting (ActionExecutingContext filterContext) – Tassadaque

관련 문제