2012-04-12 8 views
12

Ich arbeite derzeit eine Liste von Daten, die ich in einer Ansicht anzeigen muss, die eine Liste darstellen und für jedes Element die entsprechende Aktion, die ausgeführt werden kann, wie sie bearbeiten oder anzeigen Lösche sie. Für die Edition gibt es kein Problem, dass es eine bestimmte Sichtweise ist. Mein Problem ist, wenn ich ein Element löschen möchte, habe ich zwei Möglichkeiten in der Post-Methode.MVC3 RedirectToAction in einer Post-Methode und ViewBag Unterdrückung

//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(); 
} 

Die Sache mit dieser Lösung ist, dass die URL nicht mehr die gleiche wie die erste: .../Liste, es ist .../jetzt löschen, i, nicht diese Lösung große finden die andere Lösung ist, um die Aktion umleiten, jetzt ist die URL gut, aber die Fehlermeldung in der ViewBag ist nicht mehr sichtbar, haben Sie eine bessere Idee.

Antwort

35

können Sie TempData verwenden, um Informationen zu beharren über eine Anfrage und es war genau für diesen Anwendungsfall gedacht. Verwenden Sie statt ViewBag stattdessen TempData["Error"] = "";. Dann wird auf der Empfangsseite würden Sie einen Ausschnitt wie die folgende haben:

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

Siehe ASP.NET TempData persists between requests und When to use ViewBag, ViewData, or TempData in ASP.Net MVC 3.

+1

Netter Vorschlag, um ViewBag.Error = TempData ["Error"] in der Steuerung zu setzen, so dass die Ansicht über dieses Detail nicht besorgt sein muss. –

+0

Ja, ich hatte es in der Ansicht selbst, aber dann hatte ich eine Menge Logik in der Ansicht, die sich mit der zu betrachtenden Variablen beschäftigt. Ich benutze den Controller, um alle notwendigen Informationen zu erfassen und an die Ansicht zu übergeben. – Joshua

+0

Vielen Dank Joshua für die Antwort, es funktioniert gut, und danke für die Lese-Ressourcen zu. – Oflocet

13

Wenn Sie eine Umleitung ausführen, versuchen Sie TempData anstelle von ViewBag. TempData ist ein Wörterbuch, das Schlüssel/Werte in der Benutzersitzung bis zur nächsten Seitenanforderung beibehält. In Ihrem Controller:

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

in Ihrer Liste, die Sie umleiten zu:

@TempData["Error"] 

Oder wenn Sie nicht Rasiermesser sind:

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

Dank esker für die Antwort. – Oflocet

1

ViewBag Mit POST ActionResult:

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

    return view(); 
} 

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

    return view(); 
}