2012-07-27 3 views
0

Je ne sais pas si je me trompe, mais voici mon problème. Je dois transmettre les données d'un View à un autre Controller/Action.MVC 3 Passage de données du HTML au contrôleur vers un autre contrôleur via HTTPPOST

Dans mon formulaire HTML, j'ai

@using (Html.BeginForm("Preprocess", "Item", FormMethod.Post)) 
{ 
    ...some html... 
    ...loop for each item in Items collection 
    <button type="submit" name="itemInfo" value="@Model.someValue">Submit</submit> 
} 

Je reçois les données de formulaire sur mon Item/Preprocess action (vue fortement typée). Cependant, je dois passer à un «processeur central» qui traite les données en fonction d'un certain drapeau. Comment transmettre les valeurs que je reçois sur ce contrôleur à un autre contrôleur? Je suis un débutant dans MVC et je ne suis même pas sûr que ce soit la bonne façon de le faire.

Fondamentalement, j'ai trois formulaires HTML similaires à partir du formulaire ci-dessus, mais avec différents Controllers et Views. J'ai besoin d'eux pour appeler un seul maître central - Controller/Action et bien sûr passer les données du formulaire au maître Controller via HTTPPOST. Bien sûr, chaque Controller doit formater ses propres données dans une classe que le maître Controller peut accepter. Que dois-je mettre à la place de Return View() ou RedirectToAction(...)?

Pouvez-vous suggérer un moyen de faire cela?

Ou peut-être que vous pouvez suggérer un autre moyen. Il ne peut pas suivre ce que je veux, mais au fond de mon exigence est un contrôleur central/action (ou un autre code centralisé) peut recevoir les données et de réaliser des opérations en fonction d'une valeur

+0

pour transmettre les données de la vue à l'utilisation du contrôleur 'Model', et pour transmettre les données d'un contrôleur à un autre, vous pouvez utiliser' TempData' – Yasser

+0

Comment passez-vous le TempData? Devrais-je simplement rediriger vers le maître 'Controller' après avoir défini les valeurs dans' TempData'? – Devmonster

+0

TempData n'est pas destiné à être utilisé pour passer des objets complexes entre des actions de contrôleur. –

Répondre

0

Vous pouvez le faire:

return RedirectToAction("SomeAction", "SomeController",new { id=someString}); 
+0

Mais 'RedirectToAction' est une requête' GET', ai-je raison? Je dois utiliser 'POST' si possible – Devmonster

+2

Vous ne pouvez pas rediriger vers une action POST. Une redirection signifie GET. C'est la définition très basique d'une redirection. –

+0

Je suppose que j'utilise le mauvais terme, mais fondamentalement, après un «POST» il appelle (pas de redirection, mais sorte de redirections vers un autre contrôleur) un autre 'Controller' – Devmonster

0

Vous ne savez pas exactement ce que vous essayez de faire ici. Mais à partir de votre description, il semble que votre conception est erronée. Si vous essayez d'effectuer un ensemble d'actions commun une fois les données reçues et traitées par vos contrôleurs, vous devez promouvoir votre "contrôleur central" pour qu'il soit une sorte de classe de service accessible par les trois contrôleurs. La classe de service pourrait retourner un ActionResult si nécessaire:

return new ViewResult { ViewName = "MyForm" }; 

Toutefois, si vous voulez intercepter les données et effectuer certaines actions courantes que vous pourriez écrire une coutume ActionFilter à faire tout ce que votre contrôleur central fait et laisser les autres contrôleurs propres .

+0

Oui, je me suis dit que ce complexe signifiait que quelque chose n'allait pas. Je pensais à un contrôleur central pour être une classe à la place, mais cette classe doit renvoyer un 'View' dans le cas où un certain drapeau est défini. C'est comme si elle devait afficher un formulaire pour des informations supplémentaires où un utilisateur peut sélectionner un élément afin qu'il puisse poursuivre le processus. – Devmonster

+0

Très bien, demandez à votre classe de renvoyer un retour à ViewResult et de renvoyer ce résultat à votre contrôleur. J'ai ajouté un exemple à ma réponse. – Bartlett

Questions connexes