2017-02-19 9 views
-1

実際にViewBag、ViewData、TempDataの違いについて学習しています。これらの概念の理論と混乱していますので、実用的である。mvcでビュー内の変数にTempData値を割り当てることができます4

TempDataはコントローラからコントローラへ、つまりある動作方法から別の動作方法にデータを送信するために使用され、短期間であることを知りました。それでもTempData値をViewに渡すこともできます。私が読んでいるように、値は後続のリクエストの後でnullになります。しかし、私のサンプルコードのスニペットでは、リダイレクト後にTempDataに値が存在しますが、変数に割り当てることができません。

public ActionResult Index() 
{ 
var featuredProduct = new Product 
    { 
    Name = "Special cupcakes", 
    Des = "Delectable vanilla and chocolate cupcakes", 
    Creationdate= DateTime.Now, 
    Expirydate= DateTime.Today.AddDays(7) 
    }; 
ViewData["FeaturedProduct"] = featuredProduct; 
ViewBag.product = featuredProduct; 
TempData["FeaturedProduct"] = featuredProduct; 
return Redirect("~/Home/Show"); 
} 

これは最初のリダイレクト、つまりTempDataを設定した後の次の要求であるため、値はShow ActionメソッドのTempDataに保持されます。

public ActionResult Show() 
{ 
var testdata= ViewData["FeaturedProduct"]; 
var testbag = ViewBag.product; 
var tempdata = TempData["FeaturedProduct"]; 
return View(); 
} 

ここで私の混乱はここにあります。 Show ViewでTempDataにアクセスしたい場合は、nullにする必要があります。クイックウォッチで見ると、値が保持されていて、値が変数に割り当てられていません.StepDataで正確に何が起こっていますか。

@{ 
var tevar = TempData["Featured Product"] as Product; 
} 
@{ 
if (TempData["Featured Product"]!=null) 
{ 
    <b><u> 
    @tevar.Name 
    </u></b> 
} 
else{ 
<b> Sorry tempdata values perished</b> 
} 
} 

これは非常に基本的に見えますが、私のコードでTempDataで何が起きているか教えてください。 ありがとうございます。

+0

Showビューで「TempData」がnullになるのはなぜですか? Showアクションをリロードしたり、そこからリダイレクトしたりすると、nullになります。 –

+0

@DarinDimitrovだから、もしそれがnullでなかったら、TempData値がViewのtevar変数に割り当てられないのはなぜですか? – Intriguing

答えて

0

あなたのShowビューでタイプミスを持っている:

@{ 
var tevar = TempData["Featured Product"] as Product; 
} 

はもちろん、次のようになります。

@{ 
var tevar = TempData["FeaturedProduct"] as Product; 
} 

あなたはあなたがそれを保存と同じキーを使用して値にアクセスすることを確認します。

+0

はい、うまくいきました。ありがとうございました。 – Intriguing

0

これで、ViewBag、ViewData、TempDataの違いをはっきりと理解できました。 ViewBagとViewData値はリダイレクト後に失われますが、TempData値は現在のアクションメソッドのリフレッシュが発生するまで、または他のアクションメソッドに移動するまで、リダイレクトの間に残ります。

関連する問題