Salut,
J’ai une action qui ressemble à ceci:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Register(AdRegister adRegister, IEnumerable files)
AdRegister est une classe complexe et je dois la transmettre à une méthode de redirection plus loin dans l’action Register, comme ceci:
return this.RedirectToAction("Validate", adRegister);
L’action Valider ressemble à ceci:
public ActionResult Validate(AdRegister adRegister)
Je sais que je peux passer des parameters simples, mais dans ce cas c’est un object complexe. Cet exemple ne fonctionne pas, les propriétés d’adRegister seront nulles.
Est-ce que c’est possible et si oui, comment?
Meilleures salutations
Informations complémentaires : L’ action Enregistrer prend l’action adRegister et effectue des opérations magiques, puis elle est envoyée à l’action Valider. L’action Valider renvoie une page de validation à l’utilisateur. Lorsque l’utilisateur clique sur le bouton d’octroi, adRgister est rempli à partir du formulaire, puis envoyé à la publication vValidate où il sera enregistré. J’ai cherché à placer l’adRegister dans le cache ou la firebase database temporairement, mais ce serait mieux si je pouvais simplement le passer à l’action suivante.
Une possibilité serait de passer les propriétés simples dans la chaîne de requête:
return RedirectToAction( "Validate", new { foo = adRegister.Foo, bar = adRegister.Bar, ... and so on for all the properties you want to send } );
Une autre possibilité consiste à le stocker dans TempData (pendant la durée de vie de la redirection) ou dans la session (pendant la durée de la session ASP.NET):
TempData["adRegister"] = adRegister; return RedirectToAction("Validate");
puis récupérez-le à partir de TempData:
public ActionResult Validate() { adRegister = TempData["adRegister"] as AdRegister; ... }
Une autre possibilité (et celle que je vous recommanderais) est de conserver cet object dans la méthode POST dans votre magasin de données:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Register(AdRegister adRegister, IEnumerable files) { ... ssortingng id = Repository.Save(adRegister); return RedirectToAction("Validate", new { id = adRegister.Id }); }
puis récupérez-le depuis le magasin de données après avoir redirigé:
public ActionResult Validate(ssortingng id) { AdRegister adRegister = Repository.Get(id); ... }
une idée créerait probablement une variable de session et transmettrait une clé qui fait référence à cette variable de session si l’object est requirejs avec quelques vues?
Le tempdata d’ASP.NET MVC devrait être parfait pour cela.
Cela dit, TempData ou Session est une option, mais présente certains inconvénients, comme être assez violent et souvent trouble ou difficile à déboguer. Ce qui pourrait être préférable, c’est de «cacher» la valeur temporaire dans un magasin persistant, tel que le profil de l’utilisateur ou votre propre firebase database, puis de transmettre une clé à la méthode validate qui peut ensuite charger les données dudit magasin. Cela ouvre également la possibilité de récupérer des chariots abandonnés et autres.