2012-07-07 100 views
0

我註冊一個路由後,如何獲取屬於指定路由名稱的控制器和動作名稱?如何從路由名稱中檢索控制器和操作名稱?

例如,如果我註冊這個路線:

routes.MapRoute("Category", 
       "C/{id}/{urlText}", 
       new { controller = "Catalog", action = "ProductListByCategoryId" } 
); 

我想檢索控制器名稱「目錄」和由路由名稱參數「類別」動作名稱「ProductListByCategoryId」。

我需要這一個HTML幫助:

public static MvcHtmlString MenuLink(this HtmlHelper helper, 
           string name, 
           string routeName, 
           object routeValues) 
{ 
    string currentAction = helper.ViewContext.RouteData.GetRequiredString("action"); 
    string currentController = helper.ViewContext.RouteData.GetRequiredString("controller"); 
    object currentId = helper.ViewContext.RouteData.Values["id"]; 

    string actionName = ""; //This is what I want to specify 
    string controllerName = ""; //This is what I want to specify 
    var propertyInfo = routeValues.GetType().GetProperty("id"); 
    var id = propertyInfo.GetValue(routeValues, null); 

    if (actionName == currentAction && 
     controllerName == currentController && 
     id == currentId) 
    { 
     return helper.RouteLink(name, routeName, routeValues, new { @class = "active" }); 
    } 
    else 
    { 
     return helper.RouteLink(name, routeName, routeValues, new { @class = "active" }); 
    } 

} 

回答

1

你不能做到這一點只給出一個路徑名。原因是一條路線可以匹配多個控制器和動作。你可以做的是檢索從HttpContext電流控制器和行動:

RouteData rd = HttpContext.Request.RequestContext.RouteData; 
string currentController = rd.GetRequiredString("controller"); 
string currentAction = rd.GetRequiredString("action"); 
+0

並與routeName和routeValues我可以reteive控制器和動作的名稱? – Timewriter 2012-07-07 15:46:16

+0

你想在哪裏找回這些信息?從控制器操作?如果您有路由值,是不是因爲您已經在匹配此路由的控制器操作中?你想要達到什麼目的?我用一個允許你從'HttpContext'中檢索當前控制器和動作名稱的例子更新了我的答案。 – 2012-07-07 15:49:29

+0

在HtmlHelper擴展中,用於確定我使用它創建的鏈接,是否具有與生成的頁面相同的控制器,操作和ID。 – Timewriter 2012-07-07 15:57:47

相關問題