2010-02-16 3 views
1

조건이 충족 될 경우 다른 뷰를 반환하려고합니다. 액션에서 뷰로 전달 된 모델을 유지하려고합니다.다른 뷰를 반환하는 방법, OnActionExecuting의 PresMreviewModel

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var subAction = filterContext.RequestContext.RouteData.Values["subaction"].ToString(); 
     var action = filterContext.RequestContext.RouteData.Values["action"].ToString(); 

     if (!string.IsNullOrEmpty(subAction)) 
     { 
      var view = (ViewResultBase) (filterContext.Result); 
      filterContext.Result = View(action + subAction, view.ViewData.Model); 
     } 

     base.OnActionExecuting(filterContext); 
    } 

이렇게하면 "Object reference not set to an instance of an object."이됩니다. 분명히 모델이 설정되지 않았습니까?

내가 이렇게하는 이유는 가능한 한 간단하게보기의 이름을 유지하기 위해서입니다. 내 URL은 /Global/Modules/Admin/Users/Create과 같습니다. 그러면 뷰 "UsersCreate"가 반환됩니다. 어떤 작품. 그러나 모델은 비어 있거나 널입니다!

UPDATE 사실

. 그것은 단지 나를 쳤다. 문제가 해결되었습니다. 왜냐하면 나는 단지보기 만 반환하기 때문입니다. 액션은 절대로 실행되지 않습니다. 사용자 액션은 실행되지만 뷰 UsersCreate를 반환합니다. 실제로 리디렉션하지 않고 어떻게 RedirectToAction을 할 수 있습니까?

답변

1

OnActionExecuting은 조치 전에 실행되므로 모델이 아직 없습니다. 액션이 ActionResult을 반환하면 호출되는 OnActionExecuted으로 시도 할 수 있습니다.

+0

그러나보기를 변경하기에는 너무 늦었습니다. 나는'사전에 전달 된 모델 항목은 [..] 형이다. '를 얻는다. 전달 된 데이터는 사용자 목록입니다. 뷰 모델 클래스'UsersCreate'를 전달합니다. 사용자 목록은'Users'보기의 모델입니다. – Kordonme

+0

사실. 그것은 단지 나를 쳤다. 문제가 해결되었습니다. 왜냐하면 나는 단지보기 만 반환하기 때문입니다. 액션은 결코 실행되지 않습니다. 'Users' 액션은 실행되지만'UsersCreate' 뷰를 리턴합니다. 실제로 리다이렉트하지 않고 어떻게'RedirectToAction' 일을 할 수 있습니까? – Kordonme

0
public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ... 
    if (needToRedirect) 
    { 
     ... 
     filterContext.Result = new RedirectResult(url); 
     return; 
    } 
    ... 
} 
관련 문제