为什么在向 ActionLink 添加样式时需要声明一个新控制器?

Why do I need to declare a new controller when I add style to an ActionLink?

我注意到我的 MVC 项目中有些奇怪的地方。我实际上回到香草版本尝试了一下,发现以下(最后一个列表项是我唯一添加到项目中的,除了控制器中的操作 Test,仅返回 View) 的空实例 .

<ul class="nav navbar-nav">
  <li>@Html.ActionLink("Home", "Index", "Home")</li>
  <li>@Html.ActionLink("About", "About", "Home")</li>
  <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
  <li>@Html.ActionLink("Test", "Test", "Home")</li>
</ul>

但是,当我如下向操作 link 添加样式时,出现错误。它 仍然有效,但现在 VS 备注 当我检查备注时,它询问我是否要创建一个新控制器 Shared 和一个动作 测试.

<ul class="nav navbar-nav">
  <li>@Html.ActionLink("Home", "Index", "Home")</li>
  <li>@Html.ActionLink("About", "About", "Home")</li>
  <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
  <li>@Html.ActionLink("Test", "Test", "Home", new { @style = "color: blue;" })</li>
</ul>

为什么会这样?这是一个真正的问题吗?

a finite number of overloads to that method. Your "working" version is likely resolving to this one,这按预期明确引用了 "Home" 控制器:

ActionLink("Test", "Test", "Home")

但是,您的 "not working" 版本似乎可以合理地解析为 this one,其中 "works" 用于 HTML 属性,但改变了 "Home" 的含义在这种情况下,将其视为路由值(可能未解析为任何有用的内容并被忽略):

ActionLink("Test", "Test", "Home", new { @style = "color: blue;" })

它真的在client-side link 中生成正确的路线吗?如果是这样,我会认为这是一个幸运的巧合,但不会依赖它。

您可能正在寻找 this overload,它看起来像这样:

ActionLink("Test", "Test", "Home", null, new { @style = "color: blue;" })