Est-il possible de faire quelque chose comme ça dans un contrôleur ASP.NET MVC?Est-il possible de passer des classes entre les contrôleurs dans ASP.NET MVC?
public ActionResult Index(CustomADT adt)
{
...
}
Et vous passerez dans une classe à partir d'un autre contrôleur lorsque vous cliquez sur un lien. Ou est-ce seulement possible de faire circuler des cordes?
Edit:
Un peu plus d'élaboration. Disons que j'ai la hiérarchie de classe suivante:
public class Area
{
public string Name { get; set; }
public ICollection<Building> Buildings { get; set; }
}
public class Building
{
public string Name { get; set; }
}
Alors Area
contient une liste de Buildings
. Maintenant, j'ai deux contrôleurs, AreasController
et BuildingsController
. Les deux ont une méthode Index()
. Ce que je voudrais faire est quand cette URL est naviguées:
Il y répertorient toutes les zones. Puis, quand vous allez à l'adresse suivante:
Il y liste de tous les bâtiments pour la zone avec ID 1. Dans BuildingsController
, je reçois l'ID comme un entier, puis l'utiliser pour trouver la bonne zone, comme si:
public ActionResult Index(int areaId)
{
var area = areaRepository.GetById(areaId);
return View(area.Buildings);
}
Maintenant, cela semble assez maladroit pour moi. L'ID de zone doit être reçu en tant qu'int, puis je dois à nouveau cliquer sur le référentiel pour obtenir l'objet réel Area
. Est-il possible que je peux le faire à la place:
public ActionResult Index(Area area)
{
return View(area.Buildings);
}
Et pas frapper à nouveau le dépôt et re-récupérer un objet qui a déjà été instancié? Je penche pour non à cause du fonctionnement de HTTP (vous ne pouvez pas placer un objet dans l'URL), mais peut-être que quelqu'un a un tour dans leur sac.
Il semble que vous essayez de résoudre un problème qui n'est pas décrit dans votre question. Quel est le contexte de cette question? – spender
Pas beaucoup de fond, vraiment. Dans tous les didacticiels que j'ai vus, ils ne font que passer des chaînes et des ints (qui sont juste des chaînes de caractères) entre contrôleurs, comme lorsque vous cliquez sur un lien. C'est très bien le fonctionnement de HTTP, mais pas tant que ça fonctionne. Puisque les contrôleurs ne sont que des classes, je me demandais s'il y avait un moyen de passer des classes entre les contrôleurs, mais maintenant que j'y pense, je ne pense pas que ce soit possible parce que vous faites une requête HTTP qui appelle un contrôleur. –
"Et de ne plus rejouer le dépôt et de retrouver un objet qui a déjà été instancié" ... Déjà où? Si votre action de contrôleur ne regarde pas cette chose, ce qui serait? (Comme vous pouvez le constater, la nature sans état de HTTP signifie qu'il n'y a vraiment rien en dehors de votre propre code, malgré le comportement de 'ModelBinder'.) –