2009-07-28 2 views
1

Ich habe einen Controller, TempData setzt vor eine Ansicht RückkehrTempData nicht persistierenden

public ActionResult Edit(int id, int? order) 
{ 
    Route route = new Route(); 
    // Do Work 
    TempData["Route"] = route; 
    return View(new FormViewModel(route, obj1, obj2)); 
} 

Diese Ansicht contians eine Teilansicht mit einem Link, der zu einer anderen Aktion Methode geht genannt löschen, wird der Code für den Link Löschen ist :

<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%> 

der Code für die Aktion Löschen Methode ist:

public ActionResult Delete(int order) 
{ 
    Route route = (Route)TempData["Route"]; 
    // Do Work 
} 

die probl Was ich habe ist, wenn ich versuche, TempData ["Route"] zu bekommen; von der Delete-Aktionsmethode gibt null zurück.

Ich frage mich, ob das Problem ist, dass dies ein Get und kein Post ist? Wenn ja, wie kann ich einen Beitrag zum Delete ActionMethod innerhalb meines Formulars machen?

Antwort

7

TempData persistent zwischen zwei Anforderungen. Was gibt die ReturnView-Methode in Ihrer Bearbeitungsaktion zurück? Soweit ich das beurteilen kann, ist es keine Standardmethode, die in der Controller-Klasse definiert ist. Umleiten Sie in dieser Methode (d. H. Ein RedirectToRouteResult zurückgeben)?

Gibt es noch weitere Anforderungen, die zwischen den Aktionen Bearbeiten und Löschen auftreten können? Zum Beispiel Ajax-Anfragen.

Im Allgemeinen ist es keine gute Idee, TempData zu verwenden, um etwas für eine lange Zeit zu erhalten. Das Muster ist in der Regel die folgenden:

public ActionResult Update() 
{ 
    // When you put something into the TempData dictionary you usually 
    // redirect immediately to an action that will use the object stored 
    // inside. 
    TempData["something"] = "something"; 
    return RedirectToAction("success"); 
} 

public ActionResult Success() 
{ 
    var something = TempData["something"]; 
    return View(); 
} 

Wenn Sie etwas für eine längere Zeit bestehen bleiben müssen, sollten Sie Session verwenden.

+0

Ich habe den Beitrag bearbeitet, es war ein Tippfehler, sollte zurückgegeben werden View() nicht returnview. – Fermin

+1

Wie wäre es mit Ajax-Anfragen, die TempData ungültig machen könnten? –

+0

Problem behoben, es war ein Problem mit SessionState. Sortierte es mit ein paar Änderungen an der web.config. – Fermin

0

Ein weiterer Faktor von TempData funktioniert nicht, wenn Ihre App unter einem verteilten System ist.