2011-06-20 3 views
3

J'ai l'application MVC3, où je veux garder l'URL courte. Quelle est la meilleure ou la meilleure façon de le faire? Disons que j'ai deux contrôleurs Account et Home. J'ai toutes les tâches liées au compte Connexion, Déconnexion, Profil, FAQ etc. dans le Contrôleur de compte. Toutes les tâches principales dans le contrôleur de la maison comme TaskA, TaskB et TaskC. Je cherche URL comme ci-dessous:MVC 3 garder court url

  1. www.mydomain.com/Logon
  2. www.mydomain.com/Logoff
  3. www.mydomain.com/Profile
  4. www.mydomain.com/ FAQ
  5. www.mydomain.com/TaskA
  6. www.mydomain.com/TaskB

lorsque l'utilisateur premier arrivé sur le site, ils doivent rediriger vers la page d'ouverture de session. À tout moment, l'utilisateur devrait également pouvoir passer d'une action de contrôleur à une autre action de contrôleur (de TaskA à Logoff).

Quelle est la façon propre de faire cela?

Répondre

6

Vous n'avez pas besoin de définir un itinéraire pour chaque URL. Avec un peu d'aide des contraintes d'itinéraire, vous pouvez faire quelque chose comme ceci:

 routes.MapRoute(
      "Home", // Route name 
      "{action}", // URL with parameters 
      new { controller = "Home", action = "Index" }, // Parameter defaults 
      new { action = "TaskA|TaskB|TaskC|etc" } //Route constraints 
     ); 

     routes.MapRoute(
      "Account", // Route name 
      "{action}", // URL with parameters 
      new { controller = "Account", action = "Logon" }, // Parameter defaults 
      new { action = "Logon|Logoff|Profile|FAQs|etc" } //Route constraints 
     ); 
+0

Merci pour votre réponse. bonne idée. laisse moi essayer! – matmat

+0

qui ressemble à une bonne solution - j'espère qu'il n'y a pas de noms d'actions en double. – CRice

+0

Cela n'a pas fonctionné. Disons que l'utilisateur a réussi à se connecter, Dans la méthode d'action de publication de "LogOn" je redirige comme RedirectToAction ("TaskA"); TaskA appartient au contrôleur "Home". Cependant MVC runtime recherche url "/ Account/TaskA". quand nous faisons RedirectToAction MVC ajouté automatiquement le contrôleur actuel dans l'URL. Si j'aime bien RedirectToAction ("TaskA", "Home"); ça va marcher, mais je ne serai pas bref url, aucune idée de comment résoudre cette situation? – matmat

6

Vous pouvez définir un itinéraire pour les URL spécifiques qui ne correspondent pas à l'itinéraire par défaut. Par exemple:

routes.MapRoute("Logon", "logon/", new { controller = "account", action = "logon" }); 
routes.MapRoute("TaskA", "TaskA/", new { controller = "home", action = "taska" }); 

Votre itinéraire par défaut peut définir votre page de démarrage si toutes les autres correspondances pour l'URL sont introuvables.

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}/", // URL with parameters 
      new { controller = "account", action = "logon", id = UrlParameter.Optional } // Parameter defaults 
+1

Merci pour votre réponse. En fonction de votre idée, je peux gérer cette situation en créant une route pour chaque méthode d'action. donc si j'ai 50 actions, je finis par créer 50 routes. Je cherche quelque chose qui nécessite un minimum de code. – matmat

+0

ne savais pas que vous aviez tant, que diriez-vous de ce que frennky suggère alors – CRice

+0

Cela n'a pas fonctionné. Disons que l'utilisateur a réussi à se connecter, Dans la méthode d'action de publication de "LogOn" je redirige comme RedirectToAction ("TaskA"); TaskA appartient au contrôleur "Home". Cependant MVC runtime recherche url "/ Account/TaskA". quand nous faisons RedirectToAction MVC ajouté automatiquement le contrôleur actuel dans l'URL. Si j'aime bien RedirectToAction ("TaskA", "Home"); ça va marcher, mais je ne serai pas bref url, aucune idée de comment résoudre cette situation? – matmat