webentwicklung-frage-antwort-db.com.de

Objekt in RedirectToAction übergeben

Ich möchte ein Objekt in RedirectToAction übergeben. Das ist mein Code:

RouteValueDictionary dict = new RouteValueDictionary();
            dict.Add("searchJob", searchJob);
            return RedirectToAction("SearchJob", "SearchJob", dict);

wobei searchJob eine Instanz von SearchJob ist. Ich erhalte jedoch keine Daten zur SearchJob-Aktionsmethode. Stattdessen bekomme ich Querzeichenfolge von searchJob = Entity.SearchJob. Bitte hilf mir. Was mache ich falsch?

20
Jaggu

Sie können keine Klassen an die umgeleiteten Aktionen übergeben. Die Umleitung erfolgt mittels URL. URL ist eine Zeichenfolge, daher kann sie keine Klassen enthalten ( das Serialisieren von Objekten zu URLs ist hier wirklich logisch

Stattdessen können Sie TempData verwenden.

TempData["searchJob"] = searchJob;
return RedirectToAction ...;

und in Aktion umgeleitet

Entity.SearchJob = (Entity.SearchJob)TempData["searchJob"] ;

Nach der Ausführung des obigen Codes enthält TempData kein searchJob mehr. TempData wird im Allgemeinen zum einmaligen Lesen verwendet.

Aber ich mag den Weg oben nicht. Wenn ich an Ihrer Stelle wäre und Jobs nach Namen suchen möchte , würde ich gerne Routenparameter hinzufügen

RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJobName", searchJob.JobName);

und über Parameter empfangen

public ActionResult SearchJob(string searchJobName)
{
... do something with the name
}

Auf diese Weise erhalten Sie eine bessere Benutzer- und HTTP-freundliche URL, und aus Sicht der Aktion würden alle erforderlichen Parameter von außen abgerufen. Dies ist besser für Tests, Wartung usw.

34
archil

Sie könnten versuchen:

return RedirectToAction("SearchJob", "SearchJob", new RouteValueDictionary(searchJob)

Durch Übergeben des searchJob-Objekts an den RouteValueDictionary-Konstruktor wird das searchJob-Objekt zerlegt und jede Eigenschaft der SearchJob-Klasse wird als oberster Routenwert übergeben.

Mit dem Standardmodellbinder wird eine Aktion definiert als:

public ActionResult SearchJob(SearchJob searchJob)

Erhält ein vollständig rehydriertes SearchJob-Objekt.

18
Charlie

Sie können keine Klassen an die RedirectToAction-Methode übergeben. Wenn Sie ein gesamtes Objekt in einer Abfragestring oder über POST übergeben möchten, können Sie das Objekt mithilfe von XML oder JSON serialisieren und das Objekt im Empfängercontroller deserialisieren. Wenn Sie diesen Ansatz verwenden, um auf die Größe des Objekts zu achten, das serialisiert wird.

0
Max Zerbini