À l'aide d'ASP.NET MVC, certaines situations (telles que la soumission de formulaires) peuvent nécessiter un fichier RedirectToAction
.
Une telle situation est lorsque vous rencontrez des erreurs de validation après la soumission d'un formulaire et que vous devez rediriger vers le formulaire, mais que vous souhaitez que l'URL reflète l'URL du formulaire, pas la page d'action à laquelle il se soumet.
Comme j'exige que le formulaire contienne les POST
données initialement éditées, pour la commodité de l'utilisateur, ainsi qu'à des fins de validation, comment puis-je transmettre les données via le RedirectToAction()
? Si j'utilise le paramètre viewData, mes POST
paramètres seront remplacés par des GET
paramètres.
c#
asp.net-mvc
Matt Mitchell
la source
la source
Réponses:
La solution consiste à utiliser la propriété TempData pour stocker les composants Request souhaités.
Par exemple:
Ensuite, dans votre action "Formulaire", vous pouvez aller:
la source
Gardez à l'esprit que TempData stocke la collection de formulaires en session. Si vous n'aimez pas ce comportement, vous pouvez implémenter la nouvelle interface ITempDataProvider et utiliser un autre mécanisme pour stocker les données temporaires. Je ne ferais pas cela à moins que vous ne sachiez avec certitude (via la mesure et le profilage) que l'utilisation de l'état de session vous fait mal.
la source
Jetez un œil à MVCContrib , vous pouvez le faire:
la source
Il existe un autre moyen qui évite les données temp. Le modèle que j'aime consiste à créer une action pour le rendu d'origine et le rendu du formulaire invalide. Ca fait plutot comme ca:
C'est plus ou moins le modèle. Un petit pseudo-jouet. Avec cela, vous pouvez créer 1 vue pour gérer le rendu du formulaire, réafficher les valeurs (puisque le formulaire sera rempli avec les valeurs précédentes) et afficher les messages d'erreur.
Lors de la publication de cette action, si elle est valide, elle transfère le contrôle à une autre action.
J'essaie de rendre ce modèle facile dans le cadre de validation .net lorsque nous développons la prise en charge de MVC.
la source
Si vous souhaitez transmettre des données à l'action redirigée, la méthode que vous pouvez utiliser est:
la source
TempData est la solution qui garde les données d'action en action.
la source