J'essaie de transmettre un objet d'une action du contrôleur à un autre. L'objet que je passe autour semble plus ou moins comme ceci: mon contrôleur ressemble à ceci: p> la méthode de résultat échoue avec une exception de pointeur NULL puisque la liste des phonumbers est soudainement nulle après avoir invoqué l'action de résultat avec la méthode redirectoaction (). p> a vu ce type de comportement avant? P> acclamations, p> Peter p> p>
4 Réponses :
Avez-vous vraiment besoin de rediriger vers l'autre action? réellement, suivant La séparation des préoccupations MVC, que RedirectToaction Code> provoque une nouvelle demande HTTP, laquelle est la raison pour laquelle Tempdata fonctionne. Ne pouvions pas simplement appeler le résultat résultat code> directement comme celui-ci? CreePerson code>. Dans votre résultat code> action si personne code> est NULL, puis appelez la méthode Creeaperson code>. L'action index code> pourrait être éliminée tout à fait, mais cela nécessiterait de modifier vos itinéraires. Ou simplement laisser renvoyer redirecttoaction ("résultat", "dialogue"); code> est la seule ligne de code dans votre index code> action. P> CreeEpperson code> devrait probablement être une méthode à l'intérieur de votre code modèle. Le contrôleur n'a pas besoin de contenir la logique de créer une nouvelle personne code>. Qui appartient vraiment au modèle. P> p>
Bonjour Dennis, merci pour la réponse. Vous avez totalement raison de la création des objets de la personne. Merci!
Je suis d'accord avec @dennis - sauf si vous voulez que l'URL change, vous devrez penser à autre chose. La raison en est que RedirectToaction ne sérialiste pas les données, il itière simplement sur les propriétés de l'objet Valeurs de route construit une chaîne de requête avec les touches étant les noms de propriété et les valeurs de la représentation de la chaîne des valeurs de propriété. Si vous souhaitez que l'URL change, vous utilisez TEMPDATA est probablement le moyen le plus simple de le faire, bien que vous puissiez également stocker l'élément de la base de données, transmettez-le sur la méthode de résultat et de le reconstituer à partir de là. P>
Bonjour, j'ai fini par utiliser le tour de Tempdaata pour transférer des objets d'une action à l'autre. Merci d'avoir effacé la vérification de la redirection. C'était la vraie partie déroutante pour moi.
Bien que ce soit une vieille question, j'ai trouvé un une excellente réponse à celle-ci dans ce que je crois est une question en double. La clé est le constructeur routévalueddictionnerricomandiction. return RedirectToAction("Result", "Dialog", new RouteValueDictionary(person))
Pour tout le monde, cela doit vraiment appeler une action et renvoyer une vue d'un autre contrôleur avec un objet complexe et ne voulez pas (ni ne peut pas) passer à l'objet dans inspiré par la réponse trouvée ici: https: //stackoverflow.com/a/4360019/1341409 p> p> templdata code>. J'utilise dans mon application très laid mais solution de travail: