我有一个问题,我在自定义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能够意识到它正在运行的环境。
答案 0 :(得分:2)
您的意思是虚拟应用程序还是虚拟目录?虚拟目录适用于将物理文件夹映射到特定的“虚拟”URL文件夹。它们与ASP.NET MVC正交。我不知道有什么办法在“虚拟目录中”运行ASP.NET MVC应用程序,因为我觉得这没有任何意义。
如果您指的是虚拟应用程序,那么当ASP.NET MVC应用程序在虚拟应用程序中运行时,路由会将此考虑在内。