2010-01-12 57 views
1

我有一个问题,我在自定义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能够意识到它正在运行的环境。

+0

'ActionLink'和'RouteLink'当然知道虚拟文件夹。我们每天都在生产中利用这一点。这里缺少一些东西。 – 2010-01-12 19:54:09

+0

感谢您的回复,Craig。我认为同样的事情,这就是为什么我目前困惑为什么我的网址不包括虚拟文件夹。 – 2010-01-12 20:13:30

+0

FWIW,我正在使用 link.toHtmlString() 要获取链接文本。我应该使用其他方法吗? – 2010-01-12 20:20:02

回答

2

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

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

+0

我的意思是虚拟应用程序。 感谢Phil的答复,并确认了Craig已经告诉我的情况 - 事实证明这是我的一个愚蠢的用户技巧,根本没有routelink问题。 – 2010-01-12 22:03:55

+0

我应该澄清一下:克雷格并没有把它称为一个愚蠢的用户技巧。我做了;) – 2010-01-12 22:17:01