Pass objet complexe avec redirection en ASP.NET MVC?
Salut,
J'ai une action qui ressemble à ceci :
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(AdRegister adRegister, IEnumerable<HttpPostedFileBase> files)
La AdRegister est un complexe de classe et j'ai besoin de passer en une méthode de redirection vers le bas dans le Registre de l'action, comme ceci :
return this.RedirectToAction("Validate", adRegister);
De la validation de l'action ressemble à ceci :
public ActionResult Validate(AdRegister adRegister)
Je sais que je peux passer des paramètres simples, mais dans ce cas c'est un objet complexe. Cet exemple ne fonctionne pas, le adRegisters propriétés sera nulle.
Est-ce possible et si oui, comment?
BestRegards
Plus d'Informations : Registre d'action prendra la adRegister et ne som magie sur elle, puis Il sera envoyé à la validation de l'action. La validation de l'action sera de retour d'une page de validation de l'utilisateur. Lorsque l'utilisateur cliquait sur la subvention bouton de la adRgister seront comblés à partir de la forme, puis envoyé à la vValidate poste où il sera sauvé. J'ai regardé dans le lieu le adRegister dans le cache de base de données ou temporairement, mais il sera mieux si je pouvais simple de passer à l'action suivante.
OriginalL'auteur Banshee | 2011-03-23
Vous devez vous connecter pour publier un commentaire.
Une possibilité serait de passer de la simple propriétés dans la chaîne de requête:
Une autre possibilité est de le stocker dans TempData (pour la durée de vie de la redirection) ou Session (pour la durée de vie de la ASP.NET session):
puis de le récupérer à partir TempData:
Encore une autre possibilité (et celui que je vous recommande) est de persister cet objet dans la méthode POST dans votre magasin de données:
et de récupérer à partir de la banque de données après vous rediriger:
Si elles l'abandon à travers des sessions, je suppose que la base de données est mieux..
oui vous avez raison à propos de l'utilisateur de l'actualisation de la page. C'est pourquoi je ne vous recommande pas de l'utiliser. La meilleure façon est de le stocker dans la base de données ou de la Session.
Dimitrov, Oui Session pourrait être le chemin à parcourir, je n'aurez pas à nettoyer la base de données. Le seul problème est que si l'utilisateur final est lent à la soumission de butten mais je supose que je pourrais définir le délai d'expiration de session à 60 min. Cela devrait le faire. Ce sera également prendre plus de mémoire du serveur, mais il ne sera pas impliquer la base de données de l'al. Dire que je décide de l'enregistrer dans la base de données, la table de destination sera frappé beaucoup, Est-il préférable de créer une copie de la table et placez le temp de données?
si c'est juste temporaire des données de la session pourrait faire plus de sens. Mais si ces données peuvent être réutilisées plus tard, il serait préférable de les stocker de façon permanente dans la base de données. Bien sûr, vous pouvez également utiliser une table temporaire, mais si vous décidez d'aller dans cette voie, vous pourriez probablement configurer votre session fournisseur à l'utilisation de SQL server, afin de ne pas stocker en mémoire et il ira automatiquement à la base de données. De cette façon, vous ne serez pas consommer de la mémoire sur le serveur et ne se soucient pas de la persistance => il est transparent.
OriginalL'auteur Darin Dimitrov
une idée serait probablement de créer une variable de session et de faire passer une Clé qui fait référence à cette variable de session si l'objet est obligatoire acorss quelques vues?
Si ce flux de travail est quelque chose de spécifique, qui permettrait de prendre autant de temps et nécessitent de la session qui se tiendra en direct, en gardant la session en direct via un périodique appel ajax serait mieux que le paramètre timeout de la session...
OriginalL'auteur Mark Redman
ASP.NET MVC est tempdata devrait être parfait pour cela.
Cela dit, TempData ou de la Session est une option, mais il a quelques inconvénients comme le fait d'être assez violent et souvent obscur ou difficile à déboguer. Ce serait peut-être préférable est de "planquer" la valeur temporaire dans un magasin persistant, tels que le profil de l'utilisateur ou de votre propre base de données, puis de passer un par le biais de la méthode de validation qui peut ensuite charger les données à partir de ladite banque. Ceci ouvre également la possibilité de récupérer les paniers abandonnés et ces.
Attention, l'ASP.NET cache est plus violent que le stockage de Session dans la plupart des cas. C'est la première chose qui est attaqué lorsque la mémoire courte. Je voudrais utiliser la Session sur le Cache pour les données de l'utilisateur.
OriginalL'auteur Wyatt Barnett