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

时间:2016-01-01 01:34:23

标签: c# css asp.net-mvc actionlink

我注意到我的MVC项目中有些奇怪。我实际上回到了vanilla版本试用它并发现以下内容(最后一个列表项是我对项目的唯一添加,除了控制器中的操作 Test ,只返回一个空查看的实例)效果很好

<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>

但是,当我按如下方式将动作添加到动作链接时,我收到错误。 仍然有效,但现在VS备注,当我查看备注时,它会询问我是否要创建新控制器共享和操作测试

<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>

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

1 个答案:

答案 0 :(得分:4)

该方法有a finite number of overloads个。你的工作&#34;版本很可能会解析为this one,它明确地引用了&#34; Home&#34;控制器如预期的那样:

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

然而,你的&#34;没有工作&#34;版本似乎可以合理地解决this one,其中&#34;工作&#34;对于HTML属性,但更改了"Home"在这种情况下的含义,将其视为路由值(可能不会被解析为任何有用的东西并被忽略):

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

它是否真的在客户端链接中生成正确的路由?如果是这样,我认为这是一个幸运的巧合,但不会依赖它。

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

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