【问题标题】:Does HtmlHelper.RouteLink know about virtual directories?HtmlHelper.RouteLink 是否知道虚拟目录?
【发布时间】:2010-01-12 19:01:44
【问题描述】:

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

下面是相关代码sn-p:

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”而不是“/foo/Home/Tag/Production”。

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

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

【问题讨论】:

  • ActionLinkRouteLink 当然知道虚拟文件夹。我们每天都在生产中利用这一点。这里缺少一些东西。
  • 感谢克雷格的回复。我也有同样的想法,这就是为什么我现在很困惑为什么我的 URL 不包含虚拟文件夹。
  • FWIW,我正在使用 link.toHtmlString() 来获取链接文本。我应该使用其他方法吗?
  • 另外,我现在正在测试的机器也是装有 Visual Studio 的机器。我为“安装” MVC 应用程序所做的只是在该机器的 IIS 网站上为其创建一个虚拟目录。
  • ToHtmlString 应该没问题。您只需要在 IIS 中创建虚拟文件夹即可。请注意,虚拟文件​​夹意味着您必须每次都使用Url.ContentHtml.RouteLink 等。硬编码的绝对URI失败。

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

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

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

【讨论】:

  • 我的意思是虚拟应用程序。感谢 Phil 的回复,并确认了 Craig 已经告诉我的内容 - 原来这是我的一个愚蠢的用户技巧,根本没有路由链接问题。
  • 我应该澄清一下:克雷格并没有把它称为愚蠢的用户把戏。我做到了;)
猜你喜欢
  • 2011-01-08
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多