2009-05-24 16 views
0

basierend auf einer Antwort von this SO post, ich versuche, es ein wenig zu zwicken, so dass ich nicht die Route und Route Parameter hart codieren muss, sondern stattdessen (wenn möglich) eine stark typisierte Controller-Aktion Methode verwenden:Ist eine stark typisierte GetVirtualPath-Methode möglich?

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext, 
         RouteTable.Routes.GetRouteData(HttpContext)),  
         new RouteValueDictionary(   
          new 
          { 
           controller = "Foo", 
           action = "Bar" 
          })).VirtualPath; 

Der MVC-Futures-Namespace (Microsoft.Web.MVC) hat die Fähigkeit, stark eine Action zu geben ... also ich habe mich gefragt, ob dies möglich ist, so etwas zu tun, hier.

Ein stark getippter GetVirtualpath ???

Antwort

1

Kurze Antwort - ja, Sie können. Der Grund, warum ich das weiß ist, weil die ActionLink Sie sprechen (Futures) hat eine Überladung, die eine stark typisierte Action Delegate akzeptiert, die es in eine RouteValueDictionary für die RouteLink konvertiert. Ich bin mir nicht sicher, ob Sie nur die ExpressionHelper verwenden können. Ich glaube du kannst. Lassen Sie mich versuchen und ein Beispiel zu finden ...

EDIT Dies könnte funktionieren:

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext, 
        RouteTable.Routes.GetRouteData(HttpContext)),  
        Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<YourController>(c=>c.YourAction())).VirtualPath; 
Verwandte Themen