2010-08-04 9 views
3

le routage par défaut fonctionne très bienasp.net question de routage mvc

mysite.com/home/about

et je vois même comment le personnaliser pour le rendre plus court

donc je peux dire:

mysite.com/edit/1 au lieu de mysite.com/home/edit/1

mais comment puis-je le rendre plus à Handl e url comme suit

mysite.com/admin/user/1 // fonctionne

mysite.com/admin/user/details // ne fonctionne pas

mysite.com/admin/question/create // ne fonctionne pas

Je ne peux pas traiter l'identifiant comme une action? J'ai besoin d'un itinéraire personnalisé?

ai-je besoin de créer de nouveaux contrôleurs pour chaque table ou puis-je les acheminer tous par le contrôleur Admin

merci beaucoup

+0

son comme je veux un contrôleur « admin » et deux actions de l'utilisateur »et « supprimer » –

+0

itinéraires plus longs doivent être avant plus court routes. Publiez votre code de routage. –

+0

désolé je ne l'ai pas encore ... juste je me demandais comment faire le changement par défaut pour gérer cela merci –

Répondre

2

Comme déjà mentionné, probablement votre meilleur pari serait d'utiliser le nouveau Areas feature

Vous pouvez réaliser ce type de routage sans zones, mais à mesure que le nombre de contrôleurs augmente, la maintenabilité de votre site diminue. Essentiellement, vous devez coder en dur le nom du contrôleur dans la définition d'itinéraire, ce qui signifie que vous devez ajouter de nouveaux mappages d'itinéraires pour chaque nouveau contrôleur d'administration. Voici quelques exemples de la façon dont vous pouvez configurer vos itinéraires sans zones.

routes.MapRoute("AdminQuestions", // Route name 
       "admin/question/{action}/{id}", // URL with parameters 
       new { controller = "AdminQuestion", action = "Index" } // Parameter defaults 
    ); 

routes.MapRoute("AdminUsers", // Route name 
       "admin/user/{action}/{id}", // URL with parameters 
       new { controller = "AdminUser", action = "Index" } // Parameter defaults 
    ); 

Sinon, vous pourrait tout itinéraire à travers le contrôleur d'administration, mais il serait rapidement devenir très salissant avec vos actions de contrôleur exécuter plusieurs rôles.

routes.MapRoute("Admin", // Route name 
       "admin/{action}/{type}/{id}", // URL with parameters 
       new { controller = "Admin", action = "Index" } // Parameter defaults 
    ); 

Avec votre action AdminController (s) ressemblant à:

public virtual ActionResult Create(string type, int id) 
{ 
    switch (type) 
    { 
     case 'question': 
      // switch/case is code smell 
      break; 
     case 'user': 
      // switch/case is code smell 
      break; 
     // etc 
    } 
} 
1

Ajout d'itinéraires à Global.asax est assez simple. Placez les itinéraires les plus spécifiques au-dessus des itinéraires plus généraux. Le modèle le plus typique est controller/action/parameter/parameter ... Si vous avez besoin de quelque chose de plus complexe, vous pouvez regarder les zones MVC. Dans l'exemple ci-dessus "mysite.com/admin/user/details" recherche un contrôleur nommé "admin" et une action nommée "utilisateur", avec tout ce qui est après paramètre sur la méthode d'action (en supposant une configuration de route typique)

+0

ya mais les delails a besoin d'un paramètre ainsi mysite.com/admin/user/details/23 peut-être que j'ai besoin d'un nouveau contrôleur pour chaque table –

+0

Les contrôleurs sont des classes. Les actions sont des méthodes sur (donc liées à) ces classes. Voilà comment vous devriez modéliser votre application.Les routes peuvent être configurées comme vous le souhaitez. Il semble que vous souhaitiez rechercher des "zones" en mvc. – ThatSteveGuy