2012-04-12 17 views
12

Şu anda, bir listeyi temsil eden bir görünümde göstermem gereken bir veri listesi ve her bir öğe için, bunları düzenlemek gibi, gerçekleştirilebilecek ilgili eylemi gösteren bir liste çalışıyorum. onları sil. Basım için, bunun belirli bir görüş olduğunu kabul etmekte sorun yoktur. Sorunum, bir öğeyi silmek istediğimde, yazı yönteminde iki seçeneğim var.Bir post yönteminde ve ViewBag bastırmada MVC3 RedirectToAction

//Call directly the list 
[HttpPost] 
[Authorize] 
public ActionResult Delete(int itemId) 
{ 
    // logic to delete an item 
    ViewBag.Error = ""; // The result of the execution 
    return List(); 
} 

bu çözüm ile şey url artık birinci aynı olmasıdır: .../Liste, bu .../Şimdi sil, ben bu çözüm harika bulmuyorum, diğer çözüm eylemi yönlendirmek, şimdi url iyidir, ancak viewBag'daki hata mesajı artık görünmüyor, sizce daha iyi bir fikriniz var mı?

cevap

35

Bilgiyi ısrar TempData kullanabileceğiniz Liste görünümünde

TempData["Error"] = "A message goes here"; 

yönlendirme yaptığınız bu bir istek boyunca ve bu tam kullanım durumu için kastedildi. Bunun yerine, ViewBag kullanmak yerine TempData["Error"] = ""; kullanın.

[HttpGet] 
public ActionResult List() { 
    ViewBag.Error = TempData["Error"]; 
    // ... 
    return View(); 
} 

ASP.NET TempData persists between requests ve When to use ViewBag, ViewData, or TempData in ASP.Net MVC 3 bakınız: Sonra, alıcı ucunda aşağıdaki gibi bir pasajı olurdu. ActionResult POST ViewBag kullanma

+1

Denetleyicide ViewBag.Error = TempData ["Error"] parametresini ayarlamak için güzel bir öneri, böylece görünümün bu ayrıntı hakkında endişelenmemesi gerekiyor. –

+0

Evet, bunu görüntünün kendisinde kullandım, ama sonra hangi değişkenin bakacağıyla ilgili görüşte çok fazla mantığım vardı. Gerekli bilgiyi almak ve görüntüye aktarmak için denetleyiciyi kullanırım. – Joshua

+0

Cevabınız için çok teşekkürler, iyi çalışıyor ve okuma kaynakları için teşekkürler. – Oflocet

13

Yönlendirme yapıyorsanız, ViewBag yerine TempData kullanmayı deneyin. TempData, kullanıcının oturumundaki anahtarları/değerleri bir sonraki sayfa isteğine kadar koruyan bir sözlüktür. Eğer jilet kullanmıyorsanız

@TempData["Error"] 

Veya:: Kumandanızda olarak:

<%= TempData["Error"] %> 
+0

teşekkürler esker. – Oflocet

1

: cevap için

ActionResult SubmitUser() 
{ 
    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 

[HtttpPost] 
ActionResult SubmitUser() 
{ 
    TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
}