2011-05-09 63 views
5

我在asp.net web窗體4.0中使用路由並取得了一些成功。在我的頁面中,我使用Page.GetRouteURL來生成這樣的路線。如何使用Control.GetRouteUrl從App_Code中的類

<a href = '<%=GetRouteUrl("MyRoute", new {MyFirstRouteValue = "ABC", MySecondRouteValue=123}) #>' >Link Text</a> 

這工作得很好,但我發現有時候我需要在app_code的類中有這個功能。我可以用String.Format手動構建路由,但這樣做很蠢,因爲它會複製Global.asax中定義路由的代碼。

當然,在App_Code的類中沒有Page對象,所以我不能只調用GetRouteUrl。查看docs on msdn我看到一些看起來很有用的東西。

提供此方法用於編碼 方便。它相當於 調用 RouteCollection.GetVirtualPath(RequestContext, String,RouteValueDictionary)方法。

所以我跟着該文檔到this page其中指出System.Web.Routing.GetVirtualPath()需要一個System.Web.Routing.RequestContext對象。我知道HttpContext對象,但我無法弄清楚RequestContext是什麼。有人有這個運氣嗎?

回答

9

RequestContexta property作爲HttpRequest對象提供,因此您可以將其引用爲HttpContext.Current.Request.RequestContext。例如,

public string GetRouteUrl(string routeName, object routeParameters) 
{ 
    var dict = new RouteValueDictionary(routeParameters); 
    var data = RouteTable.Routes.GetVirtualPath(HttpContext.Current.Request.RequestContext, routeName, dict); 
    if (data != null) 
    { 
     return data.VirtualPath; 
    } 
    return null; 
} 
+1

謝謝Vinay!這讓我節省了數小時的搜索時間! – 2011-05-11 14:02:45

相關問題