【问题标题】:Html.ActionLink not working in production environmentHtml.ActionLink 在生产环境中不起作用
【发布时间】:2014-09-25 03:23:07
【问题描述】:

我目前正在开发一个 MVC4 项目,该项目正在部署到 IIS6 托管环境。


我正在使用Html.ActionLink() 在我的页面上生成链接。

例如:

@Html.ActionLink("Home Link", "Index", "Admin")

当我在本地运行应用程序时(即点击http://localhost:yyy),链接生成正常:

<a href="/Admin/Index">Home Link</a>

但是,当我在生产环境中运行它时:

<a href="">Home Link</a>

如您所见,该链接没有为其生成href


我认为这可能是路由的问题,但是当我尝试在浏览器中访问页面时:admin/edit/45,或者使用自定义路由绑定的页面:sf/24,这两个都可以正常工作;他们将我引导到我期望的页面。


我很没有想法,不知道如何解决。

任何帮助,将不胜感激。

谢谢,


我为此添加了赏金,希望它可能有助于获得答案。我怀疑这个问题可以帮助其他人,因为我似乎没有做任何太开创性的事情。


24/09/14 更新

这是在 VS2010 SP1 中开发的,使用内置的 Web 服务器(Cassini?)。

然后我将发布(使用 Visual Studio 的内置选项)到运行 IIS6 的服务器。

目录结构包含类似于:

App_Start
Assets
Classes
Content
Controllers
DomainModel
Scripts
Services
SharedAssets
ViewModels
Views

(即其中没有任何内容与任何链接的名称匹配)。

除此之外,捆绑似乎还有效。例如:@Scripts.Render("~/bundles/adminjs")

使用这个 (VB) Razor:

@Html.ActionLink("View", "Display", "Form", New With { .id = 72 }, Nothing)
<br />
@Html.RouteLink("View", "Default", new with { .controller = "Form", .action = "Display", .id = 72 })

我得到以下输出..

在 VS10/Chrome(本地)中:

<a href="/Form/Display/72">View</a>
<br>
<a href="/Form/Display/72">View</a>

在 IIS6/Chrome(服务器)中:

<a href="">View</a>
<br>
<a href="">View</a>

..增加了它不接路线的神秘感..

【问题讨论】:

  • 您是否将站点托管为虚拟目录?
  • 不,该站点作为 IIS 中的应用程序托管
  • 这是根站点吗?
  • 服务器上还有其他站点,但是访问'index'是通过xxxx,而不是xxxx/yy
  • 我之前也遇到过类似的问题,您的部署文件夹中的文件结构是什么样的?

标签: html asp.net-mvc iis razor


【解决方案1】:

您可能想看看这个SO,看看您是否在定义路由和默认路由的方式方面遇到了同样的问题。

【讨论】:

  • 按照这篇文章中的一个答案让我能够部分解决我的问题,我现在将进行调查以完全解决问题。当我使用“简单”路线(只有一个可选参数)时,它工作得很好。谢谢!
【解决方案2】:

IIS 6 不支持集成模式的应用程序池。 Here is a guide 如何让 IIS 将请求路由到 ASP.NET MVC 应用程序。 More guiding here.

Here is a great answer 比较经典和集成两种模式。

【讨论】:

  • 谢谢你,我正在努力看看这是否是问题所在。当我直接访问页面(例如/admin/edit/72)时,预期的页面会显示并工作。这些链接的实际生成似乎不起作用。
  • 好了,那么这些东西就不连接了。奇怪的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多