2009-05-24 3 views
0

, основанный на ответе от this SO post, я пытаюсь настроить его немного, чтобы мне не требовалось жестко кодировать параметры маршрута и маршрута, но вместо этого (если возможно) использовать строго типизированный метод действия контроллера: -Возможно ли иметь строго типизированный метод GetVirtualPath?

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 ???

ответ

1

Короткий ответ - да, вы можете. Причина, по которой я знаю это, состоит в том, что ActionLink, о котором вы говорите (Futures), имеет перегрузку, которая принимает строго типизированный делегат Action, который преобразует его в RouteValueDictionary для RouteLink. Я не уверен, что вы можете просто использовать ExpressionHelper. Думаю, что сможешь. Позвольте мне попытаться найти пример ...

EDIT Это может работать:

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext, 
        RouteTable.Routes.GetRouteData(HttpContext)),  
        Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<YourController>(c=>c.YourAction())).VirtualPath; 
Смежные вопросы