0

ルートを登録した後、指定したルート名に属するコントローラーとアクション名を取得するにはどうすればよいですか?

たとえば、このルートを登録すると:

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

コントローラ名「Catalog」とアクション名「ProductListByCategoryId」をルート名パラメータ「Category」で取得したい。

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

}
4

1 に答える 1

1

ルート名だけではこれを行うことはできません。その理由は、ルートが複数のコントローラーとアクションに一致する可能性があるためです。あなたができることは、現在のコントローラーとアクションを から取得することですHttpContext:

RouteData rd = HttpContext.Request.RequestContext.RouteData;
string currentController = rd.GetRequiredString("controller");
string currentAction = rd.GetRequiredString("action");
于 2012-07-07T15:32:45.210 に答える