我很可能没有明白这一点,但我真的无法弄清楚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帮助程序似乎是违反直觉的。
请查看以下参数:
是否有任何特殊的令人信服的理由我不明白(因为我在MVC中接受过自我教育而且可能存在差距)应该让我更喜欢HTML助手?
或者他们只是编码噪音?
答案 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提出的解决方案也很好。