2016-10-06 10 views
0

私のMVCプロジェクトでは、提出時に同じThankYouページにリダイレクトする2つのフォームがあります。なぜViewBagが空ですか?

2つのフォームのコントローラで、私はViewBagに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'を使ってメソッドを他のメソッドに渡すことです。もう1つは '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(); 
} 

と、ViewBagの前に@キーワードを使用してください。

関連する問題