8
votes

Contrôleur d'instanciate de .NET MVC à l'intérieur d'un autre contrôleur

est-il possible pour un contrôleur ASP.NET MVC de créer une nouvelle instance d'un contrôleur différent et de déléguer efficacement la résonabilité à cela?

Disons par exemple que j'ai deux contrôleurs dans / contrôleurs / répertoires: P>

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="ViewPage<int>" %>
Number of things: <%= Model.ToString() %>


1 commentaires

J'ai fait quelque chose de très semblable à cela qui a fonctionné bien - le modèle doit être passé correctement, alors qu'est-ce que c'est sur le contexte qui est un problème?


4 Réponses :


2
votes

Je pense qu'il serait préférable d'utiliser.

routes.MapRoute("Home", "Home/Index/{id}",
                            new {controller = "Other", action = "ShowNumberOfThings", id = 100});


1 commentaires

Je ne peux pas utiliser RedirectToaction car cela se traduit par deux demandes HTTP. Dans ma situation, je dois transmettre un objet complexe, pas un INT, donc je ne peux donc pas vraiment le sérialiser dans un paramètre QueryString (route). Belle réponse cependant.



3
votes

Si vous souhaitez être présenté avec "Nombre de choses: 100" Lorsque vous appuyez sur l'action Index, pourquoi ne pas rendre directement la vue correspondante:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View("~Views/Other/ShowNumberOfThings.aspx", 100);
    }
}


0 commentaires

1
votes

Une approche différente serait l'utilisation de vues partielles

au lieu de ~ vues / autre / monseignantofthings.aspx

Vous pouvez mettre votre vue dans ~ Vues / partagées / monseignéofthes.ascx

ont des vues ~ vues / autre / monseignéofthings.aspx et ~ vues / home / index.asaspx implémenter la vue partielle xxx

et dans les deux vues implémente la vue partielle xxx

Vous pouvez changer l'int pour tout objet qui sera transmis au modèle


0 commentaires

0
votes

Une autre possibilité (similaire à des vues partielles) consiste à utiliser html.renderaction code>. Cela permet de voir différentes classes de modèle et des méthodes de contrôleur séparées.

<% Html.RenderAction("yourActionName", "yourControllerName", routeValues); %>


0 commentaires