2010-07-27 6 views
2

J'ai les vues de base/vues de détail qui fonctionnent parfaitement avec le routage ASP.NET MVC par défaut; mais je voudrais construire des URL comme ceci:Routage ASP.NET MVC pour les vues maître/détail avec "Détail enfants"

/Class/Details/5 -- General Detail view [Working] 

Ce que je ne suis pas sûr

/Class/5/Details/Logs -- Detail View with Logs 
/Class/5/Details/Status -- Detail View with current Status 

(et je ne suis pas attaché à ce format d'URL, juste quelque chose à peu près equalivent.) une autre façon de mettre cela, est comme ceci:

/{controller}/{id}/{controllerSpecificMaster}/{action}/ 

ce que j'essaie d'éviter, est encombrer mon point de vue \ répertoire de classe avec un groupe de vues, qui sont tous essentiellement dérivés de la vue détaillée.

Je suis sur ASP.NET MVC 1 et .NET 3.5 SP1.

+0

Je suis presque avec vous. Quelques précisions, s'il vous plaît? Quand vous dites «maître», vous voulez dire une page maître? –

+0

Je pensais que ce pourrait être une page maître "enfant". c'est-à-dire une page maître pour les détails de mon objet "Classe". Qui aurait sur lui des données spéciales spécifiques aux détails d'une classe, tout en me permettant d'inclure des "pages" supplémentaires pour les différentes sections des détails, l'une étant "logs" l'un étant "status", etc. – Nate

Répondre

1

La première chose à faire est de suivre vos itinéraires. Vous avez peut-être déjà fait, mais au cas où vous n'avez pas, voici une entrée de la route qui va gérer vos besoins d'itinéraire personnalisés:

routes.MapRoute("Master_Detail", 
       "{controller}/{id}/{controllerSpecificMaster}/{action}", 
       new { controller = "Class", 
         action = "Index", 
         id = UrlParameter.Optional, 
         controllerSpecificMaster = "Details" 
       }); 

Ensuite, dans vos méthodes d'action où vous souhaitez utiliser le maître spécifié itinéraire page, juste inclure la clé d'itinéraire dans vos arguments de méthode, puis passer à la vue:

public ActionResult Logs(int id, string controllerSpecificMaster) 
{ 
    //do something 

    //return view with master name as argument 
    return View("Logs", controllerSpecificMaster); 
} 

Si vous devez faire beaucoup, je suggère la création d'un moteur de vue personnalisée et remplacer le FindView() méthode.

+0

Comment puis-je obtenir la route que vous avez spécifiée, dans 'Logs (..);' ActionResult? – Nate

+0

En supposant que votre contrôleur est 'MyController', id est' 1', et master est 'Detail', l'url serait ~/MyController/1/Detail/Logs –