2011-12-01 90 views
0

我想知道如何獲取給定區域,控制器和動作名稱的URL。到目前爲止,我設法想出的是:從區域,控制器和動作獲取虛擬路徑

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

櫃面你想知道,這裏是我想出瞭解決方案:

// 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" })); 

我希望這可以幫助別人。