Asp.net mvc HtmlHelper.RouteLink知道虚拟目录吗?

Asp.net mvc HtmlHelper.RouteLink知道虚拟目录吗?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我有一个问题,我在自定义HtmlHelper中为我的MVC应用程序生成链接,RouteLink不知道MVC应用程序有一个虚拟目录。这意味着我可以在测试中调试和使用应用程序,但它会在生产中生成无效链接。在生成链接时,是否有方法让RouteLink()或ActionLink()包含已部署应用程序的虚拟目录 以下是相关的代码片段: private const string STagLink = "<span class=\"tag-{0}\">{1}</span>\r\n";

我有一个问题,我在自定义HtmlHelper中为我的MVC应用程序生成链接,RouteLink不知道MVC应用程序有一个虚拟目录。这意味着我可以在测试中调试和使用应用程序,但它会在生产中生成无效链接。在生成链接时,是否有方法让RouteLink()或ActionLink()包含已部署应用程序的虚拟目录

以下是相关的代码片段:

private const string STagLink = "<span class=\"tag-{0}\">{1}</span>\r\n";
...
MvcHtmlString link = html.RouteLink(x.Name,
   new { Tag = x.Name, Controller = x.Controller, Action = x.Action },
   new { @class = "tag", Title = x.Title });
sb.AppendFormat(STagLink, j, link.toHtmlString());
private const string STagLink=“{1}\r\n”;
...
MvcHtmlString link=html.RouteLink(x.Name,
新{Tag=x.Name,Controller=x.Controller,Action=x.Action},
新的{@class=“tag”,Title=x.Title});
sb.AppendFormat(STagLink,j,link.toHtmlString());
这会为开发实例生成一个类似于“/Home/Tag/Production”的链接,但当应用程序部署到类似于/foo的虚拟目录时,该链接仍然是“/Home/Tag/Production”,而不是“/foo/Home/Tag/Production”

Phil Haack博客上的讨论与此类似:


是在开发时为MVC应用程序设置虚拟路径的唯一解决方案吗?我希望MVC知道它运行的环境。

你是指虚拟应用程序还是虚拟目录?虚拟目录应用于将物理文件夹映射到特定的“虚拟”URL文件夹。它们与ASP.NET MVC有点正交。我不知道如何“在虚拟目录中”运行ASP.NETMVC应用程序,因为我认为这没有任何意义


如果您指的是虚拟应用程序,那么当ASP.NET MVC应用程序在虚拟应用程序中运行时,路由会考虑到这一点。

ActionLink
RouteLink
当然知道虚拟文件夹。我们每天都在生产中利用这一点。这里缺少一些东西。谢谢你的回复,克雷格。我也有同样的想法,这就是为什么我现在很困惑为什么我的URL不包含虚拟文件夹。FWIW,我正在使用link.toHtmlString()获取链接文本。我应该使用其他的方法吗?另外,我现在测试的机器也是一台有VisualStudio的机器。我“安装”MVC应用程序所做的只是在那台机器的IIS网站上为它创建一个虚拟目录。
ToHtmlString
应该可以。您只需在IIS中创建虚拟文件夹。请注意,虚拟文件夹意味着您每次都必须使用
Url.Content
Html.RouteLink
,等等。硬编码的绝对URI将失败。我指的是虚拟应用程序。谢谢你的回复,菲尔,谢谢你证实了Craig已经告诉我的——事实证明这是我一个愚蠢的用户把戏,根本没有routelink问题。我应该澄清一下:Craig并没有说这是一个愚蠢的用户把戏。是的;)