Возможно ли иметь строго типизированный метод GetVirtualPath?

StackOverflow https://stackoverflow.com/questions/903136

  •  05-09-2019
  •  | 
  •  

Вопрос

на основе ответа от этот ТАК-пост, я пытаюсь немного настроить его, чтобы мне не нужно было жестко кодировать параметры маршрута и маршрута, а вместо этого (если возможно) использовать строго типизированный метод действия контроллера: -

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

Это было полезно?

Решение

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

РЕДАКТИРОВАТЬ Это может сработать:

string path = RouteTable.Routes.GetVirtualPath(
    new RequestContext(HttpContext,
                   RouteTable.Routes.GetRouteData(HttpContext)),    
                   Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<YourController>(c=>c.YourAction())).VirtualPath;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top