2011-12-01 2 views
0

Мне было интересно, как получить URL-адрес с учетом областей, контроллеров и имен действий. До сих пор все, что мне удалось найти, это:Получить VirtualPath из области, контроллера и действия

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var routeData = RouteTable.Routes.GetRouteData(httpContext); 

if (routeData != null) { 
    var virtualPath = routeData.Route.GetVirtualPath(new RequestContext(httpContext, routeData), new RouteValueDictionary(new { area = "Pages", controller = "Home", action = "Index" })); 

    if (virtualPath != null) 
     newNode.Url = "~/" + virtualPath.VirtualPath; 
} 

Однако это не работает. Мне было интересно, может ли кто-нибудь помочь.

Благодаря

+0

Где вы должны это делать? У вас есть доступ к HTTP-контексту? Когда вы говорите, что это не работает, вы можете быть немного более конкретным и объяснить ожидаемый результат и фактический результат? –

+0

Спасибо за ваш ответ. Я пытаюсь добавить его к поставщику MVC SiteMap, который я нашел в Интернете. Я обнаружил, что мне не хватает поддержки в области, поэтому я решил, что просто добавлю это в словарь значений маршрута, но это не так, поскольку выбран неправильный маршрут. У меня такое чувство, что это связано с токенами данных. – nfplee

ответ

2

Incase кто-то интересно, то вот решение, которое я придумал:

// Set the context 
var context = new RequestContext(new HttpContextWrapper(HttpContext.Current), 
    new RouteData()); 
var urlHelper = new UrlHelper(context); 

// Set the url 
var url = urlHelper.Action("Index", "Home", 
    new RouteValueDictionary(new { area = "Pages" })); 

Я надеюсь, что это поможет кому-то.

Смежные вопросы