2012-05-04 3 views
1

POST 작업을 완료 한 후 RedirectToAction을 시도하면 NullReferenceException이 발생합니다. 응용 프로그램은 내가 후속에 대한 (경로) 다른 보기로 리디렉션 클라이언트를 원하는 유효한 경우, POST'ed입니다RedirectToAction을 호출 한 후 MVC 모델이 null입니다.

응용 프로그램 후 : 여기에 내가 무엇을 시도하고있어 요약입니다 프로세스. 더 정교 있지만 SubmitApplication보기에서

[HttpPost] 
public ActionResult SubmitApplication(Application application) 
{ 
    // Do stuff 

    if (!ModelState.IsValid) 
    { 
     return View(application); 
    } 

    // Create and set variables for the next route 

    return RedirectToAction("ApplicationReview", new 
    { 
     x = "foo", 
     y = "bob" 
    }); 
} 

[HttpGet] 
public ActionResult ApplicationReview(string x, string y) 
{ 
    // Do stuff using x and y as keys 

    return View(); 
} 

나는, 다음과 유사한 코드가 있습니다. RedirectToAction 후모델SubmitApplication에있는 개체는 null이며 예외를 throw합니다. 왜 SubmitApplication View가 리디렉션 프로세스의 일부로 반환되는지 이해할 수 있습니다. 모델이 null이거나 설정하는 방법을 알 수 없습니다. 결국 리디렉션이 실제로 발생하지 않았기 때문에 대상 액션에 도달하지 못했을 것입니다.

@if (Model.HasSomething) 
{ 
    ... 
} 

내가 뭘 잘못하고 있니? 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

2

RedirectToAction의 두 번째 매개 변수는 모델이 아니며 routeValues입니다.

리디렉션 결과가 일시적으로 상태를 유지하려면 데이터를 TempData에 저장해야합니다.

+1

TempData를 사용하고 사용자가 페이지를 어떻게 든 새로 고치면 (예 : F5) TempData 항목이 사라집니다. 그래서 TempData는 MVC에서 가장 쓸모없는 것으로서 매우 희귀 한 경우를 제외하고는 절대로 사용해서는 안됩니다. 너무 희귀해서이 문제가 존재하지 않을 이유를 생각조차 할 수 없습니다. –

+0

그런데 route 값은 querysring에 값을 추가합니다 (경로에 정의되지 않은 경우). 그러면 호출 된 작업의 매개 변수 목록에 바인딩됩니다. –

+0

@MystereMan : Post-Redirect-Get을 수행하고 대상 작업에 일부 데이터를 보내야 할 때 TempData가 유용하다고 생각합니다. – Tuan

0

코드에서이라고 말하면 무슨 뜻인지 조금 불분명합니다. 코드에서 RedirectToAction을 호출 한 후에 모델에 아무 것도하지 않는다고 표시했기 때문입니다.

ApplicationReview 뷰에서 모델이 null이라는 것을 의미합니까?

편집 :

null 참조 예외 변수 간접 참조되고 있음을 나타낸다. 모델을 역 참조하는 것은 없습니다. 아마도 스택 추적을 게시하면 도움이 될 것입니다.

+0

더 명확하지 않은 것에 대해 죄송합니다. 예외는 ** SubmitApplication ** Action Method 실행 후 ** SubmitApplication ** View에 발생합니다. 내가 말할 수있는 한 ** ApplicationReview ** 액션은 실제로 호출되지 않으므로 연결된 View는 렌더링되지 않습니다. – JoeGeeky

+0

@JoeGeeky - 업데이트 참조. –

관련 문제