HtmlHelper.RouteLink知道虚拟目录吗?
我有一个问题,我在自定义HtmlHelper中为我的MVC应用程序生成链接,并且RouteLink不知道MVC应用程序具有虚拟目录。这意味着我可以在测试中调试并使用该应用程序,但它会在生产中生成无效的链接。在链接生成时,有没有办法让RouteLink()或ActionLink()包含已部署应用程序的虚拟目录?HtmlHelper.RouteLink知道虚拟目录吗?
下面是相关的代码片段:
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());
这会产生像一个链接:“/首页/标签/生产”为开发实例,但是当应用程序部署到像/ foo的虚拟目录,链接仍然是“/ Home/Tag/Production”而不是“/ foo/Home/Tag/Production”。
上菲尔哈克的博客这个讨论是类似的:http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx#71053
是设置虚拟路径在开发时的MVC应用程序的唯一的解决办法?我希望MVC能够意识到它正在运行的环境。
你的意思是虚拟应用程序还是虚拟目录?虚拟目录适用于将物理文件夹映射到特定的“虚拟”URL文件夹。它们与ASP.NET MVC正交。我不知道有什么方法可以在“虚拟目录中”运行ASP.NET MVC应用程序,因为我认为这没有任何意义。
如果您指的是虚拟应用程序,那么当ASP.NET MVC应用程序在虚拟应用程序中运行时,路由会考虑到这一点。
我的意思是虚拟应用程序。 感谢Phil的答复,并确认了Craig已经告诉我的情况 - 事实证明这是我的一个愚蠢的用户技巧,根本没有routelink问题。 – 2010-01-12 22:03:55
我应该澄清一下:克雷格并没有把它称为一个愚蠢的用户技巧。我做了;) – 2010-01-12 22:17:01
'ActionLink'和'RouteLink'当然知道虚拟文件夹。我们每天都在生产中利用这一点。这里缺少一些东西。 – 2010-01-12 19:54:09
感谢您的回复,Craig。我认为同样的事情,这就是为什么我目前困惑为什么我的网址不包括虚拟文件夹。 – 2010-01-12 20:13:30
FWIW,我正在使用 link.toHtmlString() 要获取链接文本。我应该使用其他方法吗? – 2010-01-12 20:20:02