0

このSO投稿からの回答に基づいて、ルートとルートパラメータをハードコードする必要がないように少し調整しようとしていますが、代わりに(可能であれば)強く型付けされたコントローラーアクションメソッドを使用します:-

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

MVC Futures 名前空間 (Microsoft.Web.MVC) には、ActionLink を強く型付けする機能があります。

強く型付けされた GetVirtualpath ???

4

1 に答える 1

1

簡単な答え - はい、できます。私がこれを知っている理由は、あなたが話す (Futures) には、それを に変換する強く型付けされたデリゲートをActionLink受け入れるオーバーロードがあるためです。ただし、そのまま使用できるかどうかはわかりません。できると思います。例を見つけてみましょう...ActionRouteValueDictionaryRouteLinkExpressionHelper

編集これはうまくいくかもしれません:

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext,
                   RouteTable.Routes.GetRouteData(HttpContext)),    
                   Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<YourController>(c=>c.YourAction())).VirtualPath;
于 2009-05-24T09:09:19.747 に答える