2014-04-22 8 views
5

Ich habe TempData für eine lange Zeit verwendet und konfrontiert seltsames Problem für mich. Ich habe Grundszenario:TempData ist nach RedirectToAction im Catch-Block leer. Was könnte der Grund sein?

[HttpPost] 
public ActionResult Create(ProductCreateModel newProduct) 
{ 
    // create and save product to db 

    // try upload product to external site 
    try { UploadProductToEbay(newProduct); } 
    catch { 
       TempData["error"] = "error"; 
       return RedirectToAction("Edit", newProduct.Id); 
    } 
    ... 
} 

[HttpGet] 
public ActionResult Edit(int Id) 
{ 
    var error = TempData["error"]; // at this point temp data collection is empty and have no idea why 
    ... 
} 

Die Ausgabe erfolgt beim Upload schlägt fehl, und return RedirectToAction("Edit", newProduct.Id); Zeile ausgeführt wird. Was könnten nicht sehr offensichtliche Gründe für den Verlust von Temp Data-Werten sein?

UPDATE: Wenn ich

TempData["error"] = "error"; 
RedirectToAction(...); 

außerhalb des catch Block funktioniert alles einwandfrei, Temperatur-Datenwert zu Edit Aktion übertragen wird.

+0

mögliche Antwort http://stackoverflow.com/questions/173159/difference-between-viewdata-and-tempdata –

+0

@ user1799320, gibt es keine passende Antwort für mich. – Dmytro

+0

@Dmytro - hast du die Antwort gefunden, ähnliches Problem –

Antwort

0

Es scheint, das Problem ist in return RedirectToAction("Edit", newProduct.Id); Aussage.
versuchen Sie diese Aussage stattdessen return RedirectToAction("Edit", new{Id=newProduct.Id});
Route Parameter ist von object Typ und Sie die int übergeben.

+0

Das ist nicht das Problem, Redirect funktioniert gut, das ist nicht der eigentliche Code, ich benutze wirklich neue {Id = newProduct.Id}, aber das Problem ist irgendwie mit Temp Daten . – Dmytro

+0

Okay, Sie leiten von einer POST-Aktion zur GET-Aktion um, möglicherweise wird dadurch das Problem verursacht. Ich bin nicht sicher über das. :) – Ishtiaq

+0

Ich habe in Update auf Frage geschrieben, dass das Problem nur auftritt, wenn TempData Wertzuweisung und Umleitung in catch-Block aufgerufen werden. Sonst funktioniert alles wie erwartet. – Dmytro