2014-09-17 2 views
0

저는 VS13 - MVC 5에서 일하고 있는데, 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 데이터를 전달하는 데 문제가 있습니다.내 배열이 다른 컨트롤러 메서드로 전달되지 않는 이유는 무엇입니까?

이것은 HttpPost 컨트롤러 메서드의 마지막 코드입니다.이 코드를 통해 단계별로 데이터를 처리하고 아래에서 볼 수있는 redirecttoaction 메서드에 데이터가 전달되는지 확인합니다.

 ...<irrelevant code that works fine on top>... 
     int[] idArray = new int[questionsToUse.Count]; 
     for (var i=0; i<questionsToUse.Count; i++) 
     { 
      idArray[i] = questionsToUse[i].QuestionId; 
     } 
     return RedirectToAction("ShowQuiz", new { array = idArray }); 
    } 

그리고 이것은로 리디렉션되고있는 컨트롤러 방법 :

[HttpGet] 
    public ActionResult ShowQuiz(int[] array) 
    { 
     var caseToShow = new Medcase(); 
     caseToShow.Title = "Quiz"; 
     caseToShow.Questions = new List<Question>(); 
     for (var i = 0; i < array.Count(); i++) 
     { 
      caseToShow.Questions.Add(db.Questions.Find(i)); 
     } 
     return View(caseToShow); 
    } 

나는 두 가지 방법에 중단 점을 넣고 첫 번째 방법은 아래 마지막 redirecttoaction 라인에 잘 작동 언급 한 바와 같이, 그들을 통해 강화 내가 볼 수있는 곳 매개 변수를 설정하면 데이터가 있습니다.

하지만 다음 단계로 넘어 가면 배열 값은 매번 null이됩니까? 아무도 왜 내게 설명 할 수 있습니까? 나는이 메소드를 다른 메소드에 성공적으로 사용했다. 여기서 나는 하나의 int 값을 다른 메소드에 단순히 전달했다. 이게 내가 배열이나 뭔가를 전달할 수 없다는 것과 관련이 있나? 또는 httppost 메소드 (리디렉션)의 끝에서 발생하기 때문입니까?

내가 잘못 생각하고있는 것처럼 보일 수 없다. 모든 도움을 주시면 감사하겠습니다.

+0

필자가 배열에 넣었 기 때문에 하나의 값을 전달할 때 그 값이 잘된다는 것을 알았습니다 ... 전송할 수있는 컬렉션 유형이 있는지 누군가가 알 수 있습니까? – ObedMarsh

+0

"TempData"를 사용하여이 문제를 해결하는 방법을 찾았습니다. – ObedMarsh

+0

리디렉션을 수행 중이므로 복잡한 유형을 전달할 수 없습니다. 방법을 호출하는 것과는 다릅니다. 배열을 전달하려면 데이터를 직렬화해야합니다. – Shoe

답변

0

대답은 다른 컨트롤러 메서드에 컬렉션을 개체와 함께 전달할 수있는 "TempData"기능을 사용하는 것이 었습니다.

내 코드의 변경 사항은 앞에서 설명한 게시 방법의 맨 아래부터 시작됩니다.

for (int i = 0; i < questionsToUse.Count; i++) 
     { 
      questionIds[i] = questionsToUse[i].QuestionId; 
     } 
     TempData["quizquestionids"] = questionIds; 
     return RedirectToAction("ShowQuiz"); 
    } 

단순히 배열을 tempdata에 전달하고 내 이름을 지정하기 만하면됩니다.

그런 다음 사용하려는 방법으로 컬렉션을 추출하고 필요한 모든 작업을 수행합니다.

[HttpGet] 
    public ActionResult ShowQuiz() 
    { 
     var caseToShow = new Medcase(); 
     caseToShow.Title = "Quiz"; 
     var questionIds = TempData["quizquestionids"] as int[]; 

문제에 대한 매우 간단하고 효과적인 해결책.

관련 문제