ViewBag, ViewData ve TempData
Herhangi bir vücut olduğunu açıklayabilir
- TempData
- ViewBag
- ViewData
Bir denetleyici içinde bir değer ayarlamak için gereken bir şartı var, o denetleyici Denetleyici İki yönlendirir ve Denetleyici İki Görünüm verecek.
ViewBag kullanmak için denedim, değer Denetleyicisi İki ulaşmak zaman kaybolmaz.
Zaman ve avantaj ve dezavantajları nelerdir?
Teşekkürler
CEVAP
1)TempData
Seni yönlendirmek için sağ kalmayacak veri depolamak için izin verir. Pişirme deposu olarak Oturum DAHİLİ olarak kullanır, yönlendirme yapıldıktan sonra veriler otomatik olarak tahliye edilir. Desen şudur:
public ActionResult Foo()
{
// store something into the tempdata that will be available during a single redirect
TempData["foo"] = "bar";
// you should always redirect if you store something into TempData to
// a controller action that will consume this data
return RedirectToAction("bar");
}
public ActionResult Bar()
{
var foo = TempData["foo"];
...
}
2)ViewBag, ViewData
İlgili görünümde kullanılacak denetleyici bir eylem içinde veri depolamak için izin verir. Bu eylem bir görünüm verir ve yönlendirme olmadığını varsayar. Yalnızca geçerli istek sırasında yaşıyor.
Desen şudur:
public ActionResult Foo()
{
ViewBag.Foo = "bar";
return View();
}
ve görünümü:
@ViewBag.Foo
ya ViewData:
public ActionResult Foo()
{
ViewData["Foo"] = "bar";
return View();
}
ve görünümü:
@ViewData["Foo"]
ViewBag
ViewData
sadece dinamik bir sarıcı ve ASP.NET MVC 3 var.
Bu varlık bu iki yapıları hiçbiri kullanılması gerektiğini söyledi. Görünüm modelleri ve türü kesin belirlenmiş görünümleri kullanmanız gerekir. Doğru desen şudur:
Görünümü model:
public class MyViewModel
{
public string Foo { get; set; }
}
Eylem:
public Action Foo()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}
Güçlü bir görünüm yazılan:
@model MyViewModel
@Model.Foo
Bu kısa girişten sonra hadi Sorunuzun cevabı:
Benim gereksinimi bir denetleyici içinde bir değer, bunu ayarlamak istiyorum. denetleyicisi ControllerTwo ve Controller2 olacaktır işlemek için yönlendirir Görünüm.
public class OneController: Controller
{
public ActionResult Index()
{
TempData["foo"] = "bar";
return RedirectToAction("index", "two");
}
}
public class TwoController: Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Foo = TempData["foo"] as string
};
return View(model);
}
}
ve karşılık gelen görünüm (~/Views/Two/Index.cshtml
):
@model MyViewModel
@Html.DisplayFor(x => x.Foo)
Eğer kullanıcı verileri kaybedilir hedef sayfayı F5 isabet ederse. de TempData kullanmanın dezavantajları vardır:
Şahsen TempData de kullanmıyorum. İçten Oturumu kullanır ve uygulamalarım oturum I devre dışı bırakmak için. Daha Dinlendirici bir şekilde bunu başarmak için tercih ederim. Hangisi: yönlendirme deposu veri deposu ve kullanıcı nesne yönlendirme oluşturulan benzersiz kimliği. gerçekleştiren ilk denetleyici eylem Hedef eylem bu kimliği başlangıçta saklanan nesneyi geri getirmek için kullanın:
public class OneController: Controller
{
public ActionResult Index()
{
var id = Repository.SaveData("foo");
return RedirectToAction("index", "two", new { id = id });
}
}
public class TwoController: Controller
{
public ActionResult Index(string id)
{
var model = new MyViewModel
{
Foo = Repository.GetData(id)
};
return View(model);
}
}
Görünümü aynı kalır.
'ViewData ve ViewBag arasındaki f...
ViewData ve TempData Arasındaki fark?...
ASP.NET MVC - TempData - İyi ya da köt...
Nasıl Denetleyicileri için bir temel s...
Bu ViewData öğe anahtarı 'ANAHTAR...