15

我很可能没有明白这一点,但我真的不知道 ASP.NET MVC 的 HTML Helpers 如何帮助我。这是一个示例:-

HTML:

<a href="ActionName" target="_blank">Click Me</a>

HTML 助手:

<%= Html.ActionLink("Click me", "ActionName", null, new {target="blank"}) %>

我的眼睛更容易阅读 HTML,使用 HTML Helpers 似乎违反直觉。

看看以下论点:

  • 很多人(甚至是新手)都知道如何阅读 HTML。HTML Helper 语法很容易混淆。
  • 在许多情况下,您需要在编写 HTML 'helper' 时输入更多内容,然后才需要编写实际的 HTML。
  • HTML Helper 无论如何都会产生真正的 HTML,那么为什么不直接编写 HTML 呢?
  • 编写 HTML 可以让您更好地控制语法和标准。您可以使其符合您想要的任何 HTML 标准。

是否有任何我不理解的特别令人信服的原因(因为我在 MVC 中自学并且可能存在差距)应该让我想要更喜欢 HTML Helpers?

还是它们只是代码噪音?

4

4 回答 4

15

您不直接使用标签的主要原因<a>是您不想在应用程序中对 URL 进行硬编码。该Html.ActionLink方法将抽象出 URL 生成,您将指定控制器、操作和其他参数。

因此,基本上,您在问题中发布的两行并不完全相同。您应该考虑将动态 URL 生成代码添加到<a>标记中,以使它们在功能上等效。除此之外,如果你直接输出 HTML,你必须非常小心 HTML 编码的东西。Html.ActionLink也会为您完成这项工作。

于 2009-08-29T00:45:58.170 回答
9

假设您在 URL 中有许多查询参数,例如

site.com?a=1&b=2&c=3&d=4&e=1&f=1

<%= Html.ActionLink("Click me", "ActionName", null, new {a=1, b=2, c=3, d=4, e=1, f=1}) %>

actionlink 可以为您构建此 URL。如果您没有帮助程序,则必须手动将键和值添加到 URL。这是一个真正的痛苦。URL 助手也可以匹配 URL 路由。

于 2009-08-29T01:19:05.420 回答
7

更好的是,使用 MvcContrib 并抛弃容易出错的“魔术字符串”并用 lambdas 替换它们。

<%= Html.ActionLink<MyController>(x => x.ActionName() ,"Click me",new {target="blank"}) %>
于 2009-08-29T04:10:46.410 回答
0

其实两者并没有太大区别

<a href="ActionName" target="_blank">Click Me</a>

<%= Html.ActionLink("Click me", "ActionName", null, new {target="blank"}) %>

因为在这两种情况下你都在硬编码(第一个是 URL,后一个是动作名称)。

这就是为什么我为链接创建特定的辅助方法,然后我使用

<%= Html.LinkSomeAction("Click me") %>

这样,我确信当我改变对动作应该使用哪个名称的想法时,我会没事的;此外,我永远不必担心输入错误的操作名称或链接。

mxmissile 提出的方案也不错。

于 2009-08-29T07:19:29.480 回答