2010-05-11 7 views
4

Quel est le moyen le plus simple d'obtenir l'URL (relative ou absolue) d'un itinéraire dans MVC? J'ai vu ce code ici sur SO mais il semble un peu bavard et n'énumère pas le RouteTable.ASP.NET MVC: Route vers l'URL

Exemple:

List<string> urlList = new List<string>(); 
urlList.Add(GetUrl(new { controller = "Help", action = "Edit" })); 
urlList.Add(GetUrl(new { controller = "Help", action = "Create" })); 
urlList.Add(GetUrl(new { controller = "About", action = "Company" })); 
urlList.Add(GetUrl(new { controller = "About", action = "Management" })); 

Avec:

protected string GetUrl(object routeValues) 
{ 
    RouteValueDictionary values = new RouteValueDictionary(routeValues); 
    RequestContext context = new RequestContext(HttpContext, RouteData); 

    string url = RouteTable.Routes.GetVirtualPath(context, values).VirtualPath; 

    return new Uri(Request.Url, url).AbsoluteUri; 
} 

Qu'est-ce qu'une meilleure façon d'examiner la RouteTable et obtenir une URL pour un contrôleur et une action donnée?

+0

Si vous êtes dans une action il y a l'aide d'UrlAction http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action.aspx – R0MANARMY

Répondre

0

Qu'en est-ce (dans le contrôleur):

public IEnumerable<SiteMapEntry> SiteMapEntries 
    { 
     get 
     { 
      var entries = new List<SiteMapEntry>(); 

      foreach (var route in this.Routes) 
      { 
       entries.Add(new SiteMapEntry 
       (
        this.Url.RouteUrl(route.Defaults), 
        SiteMapEntry.ChangeFrequency.Weekly, 
        DateTime.Now, 
        1F)); 
      } 

      return entries; 
     } 
    } 

Lorsque le contrôleur est membre:

public IEnumerable<Route> Routes 

Prenez note:

this.Url.RouteUrl(route.Defaults) 
+0

Juste comme un asid e. Il est recommandé de modifier votre question originale plutôt que de poster une nouvelle réponse (à moins que ce ne soit la vraie réponse) –

+0

GREAT! C'est ce que je cherchais. Je vous remercie! –

7

Utilisez la classe UrlHelper: http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.aspx

Vous devriez pouvoir l'utiliser via l'objet Url dans votre contrôleur. Pour mapper à une action, utilisez la méthode Action: Url.Action("actionName","controllerName");. Une liste complète des surcharges pour la méthode Action est ici:

donc votre code ressemblera à ceci:

 List<string> urlList = new List<string>(); 
     urlList.Add(Url.Action("Edit", "Help")); 
     urlList.Add(Url.Action("Create", "Help")); 
     urlList.Add(Url.Action("Company", "About")); 
     urlList.Add(Url.Action("Management", "About")); 

EDIT: Il semble, de votre nouvelle réponse, que vous essayez de construire un plan du site .

Jetez un oeil à ce projet Codeplex: http://mvcsitemap.codeplex.com/. Je ne l'ai pas utilisé moi-même, mais ça a l'air assez solide.

Questions connexes