HtmlHelper.RouteLink是否了解虚拟目录?

时间:2010-01-12 19:01:45

标签: 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";
...
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());

这会为开发实例生成类似:“/ Home / Tag / Production”的链接,但是当应用程序部署到像/ foo这样的虚拟目录时,链接仍然是“/ Home / Tag / Production”而不是“/富/首页/标签/生产”。

关于Phil Haack博客的讨论与此类似:http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx#71053

是否是在开发时为MVC应用程序设置虚拟路径的唯一解决方案?我希望MVC能够意识到它正在运行的环境。

1 个答案:

答案 0 :(得分:2)

您的意思是虚拟应用程序还是虚拟目录?虚拟目录适用于将物理文件夹映射到特定的“虚拟”URL文件夹。它们与ASP.NET MVC正交。我不知道有什么办法在“虚拟目录中”运行ASP.NET MVC应用程序,因为我觉得这没有任何意义。

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