2011-06-30 2 views
0

Dans un contrôleur, est-il possible de renvoyer la vue d'une action depuis UN AUTRE contrôleur? L'autre option consiste à retourner une vue partielle, qui utilise Html.Action (...) pour renvoyer la vue de l'autre contrôleur, mais je me demandais s'il y avait quelque chose de plus propre. Merci.MVC2 - Possibilité d'invoquer l'action d'un contrôleur DIFFERENT?

+6

Le titre et le corps de votre question ne sont pas d'accord. Demandez-vous d'invoquer l'action * de l'autre contrôleur ou simplement une * vue * construite pour un autre contrôleur? – StriplingWarrior

Répondre

1

Je fini par utiliser ma solution originale, qui avait une vision commune qui invoque une action. C'était beaucoup moins de code que nécessaire. Merci.

1

Oui, si cette vue est une vue partagée. Placez la vue dans le dossier Views/Shared dans votre projet MVC, puis les deux contrôleurs seront en mesure de le retourner.

+0

bien que cela soit vrai, si vous voulez charger une vue qui est techniquement désignée par un autre contrôleur, la réponse de @ Marnix est correcte. –

4

Si vous souhaitez réutiliser uniquement la vue, vous pouvez passer le chemin d'accès à la vue. Par exemple:

public ActionResult MyAction() 
{ 
    // do your model magic here 
    return View("~/Views/OtherController/View.aspx", model); 
} 

Ou vous pouvez déplacer la vue de Views/Shared comme Kyle a déjà suggéré.

-1

Voici une stratégie que je l'utilise pour appeler une autre action sans avoir à créer une vue spéciale pour cette fin:

Créer une vision commune qui prend un modèle qui définit une action, le contrôleur et RouteValues, et dont la seule La responsabilité est d'appeler RenderAction avec les valeurs de ce modèle.

Ensuite, créez une méthode d'assistance sur votre classe de contrôleur de base qui prend comme paramètres un Action, un Controller et un RouteValues, et renvoie le ViewResult pour cette vue partagée. De cette façon, vous pouvez réutiliser cette méthode d'assistance et cette vue partagée sur tous vos contrôleurs chaque fois que vous voulez rendre une autre action à partir du contexte d'une autre action.

Bien sûr, si c'est juste la vue et non l'action que vous voulez invoquer, la réponse de Marnix est correcte.

+1

-1 n'aide personne si elles ne sont pas expliquées, les gars. – StriplingWarrior

+0

Cela ressemble à une façon maladroite de faire les choses. Utiliser une vue pour influencer les contrôleurs fonctionne comme si vous aviez piraté le modèle MVC. –

+0

@Simon Halsey: Je suppose qu'on pourrait soutenir que toute l'idée de 'RenderAction' pirate le modèle MVC. Néanmoins, cela aide à éviter beaucoup de code en double. L'utilisation de la méthode 'RenderAction' pour permettre à un contrôleur d'appeler une action enfant sur un autre contrôleur peut également faciliter la réutilisation du code. J'apprécie les commentaires, cependant. Si vous trouvez un moyen moins maladroit, j'espère que vous le partagerez avec nous. – StriplingWarrior

Questions connexes