Übergeben von Daten zwischen verschiedenen Controller-Aktionsmethoden
Ich bin mit ASP.NET MVC 4
. Ich bin versucht, die übergabe von Daten von einem controller zu einem anderen controller. Ich bin nicht immer dieses Recht. Ich bin mir nicht sicher, ob dies möglich ist?
Hier ist die Quelle meiner action-Methode, wo ich will, übergeben Sie die Daten aus:
public class ServerController : Controller
{
[HttpPost]
public ActionResult ApplicationPoolsUpdate(ServiceViewModel viewModel)
{
XDocument updatedResultsDocument = myService.UpdateApplicationPools();
//Redirect to ApplicationPool controller and pass
//updatedResultsDocument to be used in UpdateConfirmation action method
}
}
Ich brauche, um es zu übergeben, um diese Aktionsmethode in dieser controller:
public class ApplicationPoolController : Controller
{
public ActionResult UpdateConfirmation(XDocument xDocument)
{
//Will add implementation code
return View();
}
}
Habe ich versucht Folgendes in die ApplicationPoolsUpdate
action-Methode, aber es funktioniert nicht:
return RedirectToAction("UpdateConfirmation", "ApplicationPool", new { xDocument = updatedResultsDocument });
return RedirectToAction("UpdateConfirmation", new { controller = "ApplicationPool", xDocument = updatedResultsDocument });
Wie hätte ich das erreichen?
InformationsquelleAutor der Frage Brendan Vogt | 2013-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
HTTP und leitet
Lassen Sie uns zunächst rekapitulieren, wie ASP.NET MVC funktioniert:
Lassen Sie auch uns daran erinnern, was für eine Umleitung ist:
Einen HTTP-redirect ist eine Antwort, die der webserver an den client sendet, dem client mitzuteilen, sich für die angeforderte Inhalt ist unter einer anderen URL. Die neue URL ist, die in einer
Location
- header, die der webserver an den client zurückschickt. In ASP.NET MVC, brauchen Sie eine HTTP-Umleitung durch die Rücksendung einesRedirectResult
aus einer Aktion.Weitergabe der Daten
Wenn Sie waren nur auf der Durchreise einfache Werte wie strings und/oder ganzen zahlen, könnten Sie übergeben Sie als Abfrageparameter in der URL in der
Location
header. Dies ist, was passieren würde, wenn Sie so etwas wieals andere haben vorgeschlagen
Dem Grund, dass dies nicht funktionieren wird, ist, dass die
XDocument
ist ein potenziell sehr komplexen Objekt. Es gibt keine einfache Möglichkeit, die ASP.NET MVC-framework zum serialisieren des Dokuments in etwas, das passt in eine URL und dann Modell binden aus der URL-Wert zurück zu IhremXDocument
action-parameter.Im Allgemeinen, übergeben Sie das Dokument an den client, damit der client übergeben Sie zurück an den server bei der nächsten Anfrage, das ist ein sehr sprödes Verfahren: es müssten alle Arten von serialisieren und deserialisation und alle möglichen Dinge, die schief gehen könnte. Wenn das Dokument groß ist, es könnte auch eine beträchtliche Verschwendung von Bandbreite und könnte schwerwiegende Auswirkungen auf die performance der Anwendung.
Stattdessen, was Sie wollen zu tun ist, halten Sie das Dokument, um auf dem server und pass ein Bezeichner an den client zurück. Der client übergibt dann die Kennung zusammen mit der nächsten Anforderung und ruft der server das Dokument mit dieser id.
Speichern von Daten für den Abruf bei der nächsten Anfrage
So, die Frage wird jetzt, wo der server speichern Sie das Dokument in der Zwischenzeit? Gut, das ist für Sie zu entscheiden und die beste Wahl hängt von Ihrem speziellen Szenario. Wenn dieses Dokument muss verfügbar sein, auf lange Sicht, möchten Sie vielleicht, um es zu speichern auf der Festplatte oder in einer Datenbank. Wenn es enthält nur vorübergehende Informationen, halten es in den webserver-Speicher, in dem ASP.NET cache oder die
Session
(oderTempData
das ist mehr oder weniger das gleiche wie dieSession
am Ende) kann die richtige Lösung sein. So oder so, speichern Sie das Dokument unter einem Schlüssel, erhalten Sie das Dokument später:und dann kehren Sie die Taste, um den client:
Wenn Sie möchten, um das Dokument abrufen, die Sie einfach abrufen, basierend auf dem Schlüssel:
InformationsquelleAutor der Antwort Rune
Haben Sie versucht, mit ASP.NET MVC TempData ?
Würde der code so etwas wie dieses:
Und in der ApplicationPoolController:
InformationsquelleAutor der Antwort user1073075
Ich persönlich nicht wie zu verwenden TempData, aber ich bevorzuge, um pass ein stark typisiertes Objekt, wie in Die Weitergabe von Informationen Zwischen Steuerungen in ASP.Net-MVC.
Sollten Sie immer einen Weg finden, machen es explizit und erwartet.
InformationsquelleAutor der Antwort L-Four
ich benutze lieber diese statt der
TempData
und anderen
controller Action
istist es zu spät, aber ich hoffe, hilfsbereit zu sein für eine in die Zukunft
InformationsquelleAutor der Antwort Amgad Mohamed
Wenn Sie brauchen, um die übergabe von Daten von einem controller zum anderen müssen Sie für die übergabe von Daten von route-Werten.Denn beide sind unterschiedliche Anfrage.wenn Sie das senden von Daten von einer Seite zur anderen, dann müssen Sie Benutzer-query-string(wie route-Werten).
Aber Sie können einen trick :
In Ihrem Aufruf Aktion rufen Sie die genannten Maßnahmen als eine einfache Methode :
InformationsquelleAutor der Antwort jishnu saha