【问题标题】:Get the VirtualPath From the Area, Controller and Action从区域、控制器和动作中获取 VirtualPath
【发布时间】:2011-12-01 22:50:21
【问题描述】:

我想知道如何在给定区域、控制器和操作名称的情况下获取 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;
}

但是它不起作用。我想知道是否有人可以提供帮助。

谢谢

【问题讨论】:

  • 您需要在哪里执行此操作?您是否有权访问 HTTP 上下文?当您说它不起作用时,您能否更具体一点并解释预期结果和实际结果?
  • 感谢您的回复。我正在尝试将其添加到我在网上找到的 MVC SiteMap 提供程序中。我发现缺少区域支持的那个,所以我想我只需将其添加到路由值字典中,但事实并非如此,因为选择了错误的路由。我觉得这与数据令牌有关。

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

如果有人想知道,这是我想出的解决方案:

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

我希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多