実際に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で何が起きているか教えてください。 ありがとうございます。
Showビューで「TempData」がnullになるのはなぜですか? Showアクションをリロードしたり、そこからリダイレクトしたりすると、nullになります。 –
@DarinDimitrovだから、もしそれがnullでなかったら、TempData値がViewのtevar変数に割り当てられないのはなぜですか? – Intriguing