2016-10-06 2 views
0

내 MVC 프로젝트에서 제출할 때 동일한 감사 페이지로 리디렉션하려는 두 가지 양식이 있습니다.왜 ViewBag가 비어 있습니까?

ViewBag에 저장 한 2 가지 형식의 컨트롤러에서 ThankYou 페이지의 텍스트. 컨트롤러에

나는이 같은 ViewBage 설정 :

if (result == "success") 
    { 
    ViewBag.ThankYouText = "We have received your Contact us request." 

    return RedirectToAction("Index", "ThankYou",ViewBag); 
    } 

를 그리고 감사합니다보기에 나는 그것을 얻을 :

<p>ViewBag.ThankYouText</p> 

을하지만 내 감사합니다 페이지에 아무것도를 받고 없습니다 유지.

나는 순수한 MVC에 익숙하지 않기 때문에 나는 틀린 어떤 생각을했을 것임에 틀림 없는가?

+5

'ViewBag '은 컨트롤러에서보기로 데이터를 전달하기위한 것입니다. 다른 방법으로 리디렉션하면 즉시 값이 손실됩니다. 하나의 옵션은'TempData'를 사용하여 메소드를 다른 메소드에 전달하는 것입니다. 또 다른 방법은 return RedirectToAction ("Index", "ThankYou", new {message = "..."}); 그리고'ThankYou()'메서드에서'string message' 매개 변수를 추가하는 것입니다. –

+1

예 하나의 컨트롤러 액션에서 다른 액션으로 데이터를 전달하기 위해'TempData'를 사용할 필요가 있습니다. 두번째 액션에서 뷰백을 설정할 수 있습니다. 그렇지 않으면 TempData도 작동합니다. –

+0

@StephenMuecke 생각 해줘서 고맙습니다. 'tempData'를 사용하는 것보다, 나는 뷰에서 값을 얻는 방법을 확실히 알고있다. – user3378165

답변

1

한 컨트롤러에서 다른 컨트롤러로 ViewBag 값을 전달할 수 없습니다. 컨트롤러에서보기 전용으로 데이터를 전달할 때 사용됩니다.

컨트롤러에서 컨트롤러로 데이터를 전달하려면 TempData를 사용할 수 있습니다. 아래와 같이

변경 컨트롤러 :

if (result == "success") 
    { 
    TempData["ThankYouText"] = "We have received your Contact us request."  
    return RedirectToAction("Index", "ThankYou"); 
    } 

것은 아래보기 변경 : 색인 방법이

TempData["ThankYouText"] = "We have received your Contact us request."; 

return RedirectToAction("Index", "your controller"); 

같은

<p>@TempData["ThankYouText"]</p> 
+0

완벽하게 작동 해 주셔서 감사합니다! – user3378165

0

변경 코드를

public ActionResult Index() 
{ 
    ViewBag.ThankYouText = TempData["ThankYouText"]; return View(); 
} 

이전에 @ keyword를 사용하십시오. 감사합니다 .YouText

관련 문제