Question

Est-il possible d'afficher une vue d'un autre contrôleur?

Disons, par exemple, j'ai un CategoriesController et une vue Category/NotFound.aspx. Alors que dans le CategoriesController, je peux easly revenir View("NotFound").

Maintenant que j'ai un ProductsController et une action et en vue d'ajouter un produit. Cependant, cette action exige que nous ayons une catégorie pour ajouter le produit à. Par exemple, Products/Add/?catid=10.

Si je ne suis pas en mesure de trouver la catégorie basée sur catid, je veux montrer la vue NotFound du contrôleur Catégories au lieu de créer une vue CategoryNotFound sous le contrôleur de produits.

Est-ce possible ou suis-je structurer les choses dans le mauvais sens? Y at-il une bonne façon de le faire?

Était-ce utile?

La solution

Oui. Par défaut, ASP.NET MVC vérifie d'abord dans \Views\[Controller_Dir]\, mais après cela, si elle ne trouve pas la vue, il vérifie dans \Views\Shared.

Le répertoire partagé est là spécifiquement pour échanger des vues sur plusieurs contrôleurs. Il suffit d'ajouter votre vue au sous-répertoire partagé et vous êtes bon pour aller.

Si vous ne return View("~/Views/Wherever/SomeDir/MyView.aspx") Vous pouvez retourner tout View vous souhaitez.

Autres conseils

Vous pouvez utiliser:

return View("../Category/NotFound", model);

Il a été testé dans ASP.NET MVC 3, mais devrait également fonctionner dans ASP.NET MVC 2.

Oui il est possible. Retour une méthode RedirectToAction() comme ceci:

return RedirectToAction("ActionOrViewName", "ControllerName");

Avez-vous essayé RedirectToAction?

Oui, vous pouvez. Retour d'une action comme ceci:

return RedirectToAction("View", "Name of Controller");

Un exemple:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");

Cette approche appelle la méthode GET

vous pouvez également transmettre des valeurs à l'action comme ceci:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );

Vous pouvez également appeler un contrôleur de JavaScript / jQuery . Disons que vous avez un contrôleur de retour 404 ou une autre usercontrol / page. Puis, sur une action, à partir de votre code client, vous pouvez appeler une adresse qui déclenche votre contrôleur et renvoie le résultat dans

Avec ce code, vous pouvez obtenir un contrôleur:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);
scroll top