2010-11-06 4 views
0

Je suis nouveau sur ASP.NET MVC et j'ai été capable de comprendre à peu près tout ce dont j'avais besoin jusqu'à maintenant. Mes URL sont de plus en plus complexes et je peux les amener à router et faire ce que je veux mais je suis sûr que la façon dont je le fais est mauvaise et le code que je dois faire est très bâclé. Quelques-unes des URL que j'ai sont:Routage d'URL complexe C# MVC 2.0

mysite.com/Setup/FieldManager/Client/List
mysite.com/Setup/FieldManager/Client/Add

Fondamentalement, la mise en page de l'URL que je veux est Module/SubModule/Type/Evénement. Mon problème est que je dois passer à un contrôleur d'installation qui appelle l'action Gestionnaire de champs. De là, je dois faire une déclaration de commutateur ridicule pour ensuite "sous-gérer" le routage d'ici aux autres actions correctes. Mon zone Action Manager ressemble à ceci:

public virtual ActionResult FieldManager(string type, string option, string inputType, string values, string label, string varname, string id) 
    { 
     CheckAuth(false); 
     ActionResult theView = null; 
     switch (type) 
     { 
      case "Client": 
       switch (option) 
       { 
        case "Add": 
         theView = AddClientField(); 
         break; 
        case "List": 
         theView = ClientFieldManager(); 
         break; 
        case "Save": 
         theView = SaveClientField(inputType, values, label, varname, id); 
         break; 
        default: 
         theView = EditClientField(option); 
         break; 
       } 
       break; 
      case "Case": 
       theView = View("CaseFieldManager"); 
       break; 
      default: 
       theView = View("Error"); 
       break; 
     } 
     return theView; 
    } 

Je suis désireux de maintenir la même URL que j'utilise et appeler le contrôleur/action correcte directement, sans avoir à rediriger l'appel d'une action à l'autre. Les routes actuelles que j'ai configurées sont également ci-dessous.

 routes.MapRoute(
      "Default", 
      "{controller}/{action}/{type}/{option}", 
      new { action = "Index", type = UrlParameter.Optional, option = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      "Root", 
      "", 
      new { controller = "Account", action = "Index", id = UrlParameter.Optional } 
     ); 

Ce que j'ai fonctionné c'est juste trop bâclé et je dois convertir les types entre les appels. Je cherche la meilleure façon d'accomplir pourquoi j'essaye de faire. Est-ce que la meilleure façon de le faire serait de faire des centaines d'itinéraires spécifiques pour tous mes appels ou est-ce que je manque quelque chose?

Répondre

0

Une amélioration pourrait être de mapper le type et l'option à une énumération nullable au lieu de chaînes. Ou mappez les modules aux zones MVC, subModule à controller, tapez to action et event à une énumération Nullable.

+0

C'est exactement ce dont j'avais besoin. J'ai fait un tour sur google et trouvé ces 2 liens: http://www.asp.net/mvc/videos/aspnet-mvc-2-areas et http://www.asp.net/learn/whitepapers/what-is-new -in-aspnet-mvc et était capable de faire ce que je voulais faire. Merci pour l'aide. – DSlagle