ASP.NET MVC HTML助手被高估了吗?

时间:2009-08-29 00:43:24

标签: html asp.net-mvc coding-style html-helper

我很可能没有明白这一点,但我真的无法弄清楚ASP.NET MVC的HTML帮助程序如何帮助我。这是一个样本: -

HTML:

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

HTML Helper:

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

我的眼睛更容易阅读HTML,使用HTML帮助程序似乎是违反直觉的。

请查看以下参数:

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

是否有任何特殊的令人信服的理由我不明白(因为我在MVC中接受过自我教育而且可能存在差距)应该让我更喜欢HTML助手?

或者他们只是编码噪音?

4 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:9)

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

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路由。

答案 2 :(得分:7)

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

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

答案 3 :(得分:0)

实际上,

之间没有太大区别
<a href="ActionName" target="_blank">Click Me</a>

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

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

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

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

这样我肯定当我改变主意应该采取行动的名称时,我会没事的;此外,我永远不必担心错误的动作名称或链接。

mxmissile提出的解决方案也很好。