MVC - 为什么使用ActionLink而不是硬编码链接?

时间:2014-11-26 10:58:25

标签: asp.net-mvc href actionlink

Microsoft MVC,Razor,Visual Studio 2013

我可以使用这两种方法中的任何一种创建链接。使用Html.ActionLink方法有什么好处,因为我看不到任何好处?

<a href="/Review/MyReviews">My Reviews</a>

@Html.ActionLink(linkText:="My Reviews", controllerName:="Review", actionName:="MyReviews")

感谢, 约翰

3 个答案:

答案 0 :(得分:2)

是。使用Url.Action()生成网址和Html.ActionLink()生成锚标记很有用,因为它会确保生成正确的相对网址来自操作控制器名称。

在某些情况下,当应用程序托管在Inner目录中时,由于错误的Url,我们的 css 样式表 js 文件无法加载。

考虑您在页面中使用第一个方法时使用锚标记的方案,并且视图位于嵌套的子目录中,如视图 - &gt;首页 - &gt;部分 - &gt; _Index.cshtml

现在,如果您以这种方式编写锚标记:

<a href="/About/Index">About</a>

现在我们说回到一个目录然后关于控制器和索引操作但在当前场景中正确的URL将是:

<a href="../About/Index">About</a>

并编写以下锚标记将确保生成Url正确无误:

<a href="@Url.Action("Index","About")">About</a>

或:

Html.ActionLink(linkText:="About", controllerName:="About", actionName:="Index")

使用普通的硬编码网址会导致类似SO Post的问题。

OP面临问题ajax调用由于错误的Url没有进入操作,并且使用@Url.Action()帮助程序解决了问题,因为它确保生成的Url正确。

您还应该阅读this informative article to make more clear understanding

答案 1 :(得分:0)

完全同意@Ehsan:在将应用程序移动到Web服务器(相对路径)时,ActionLink帮助程序可以为您节省很多麻烦。

此外,ActionLink更好,因为如果你后者更改你的Controller或Action名称,编译器应该警告你。

另一方面,“a href ...”在运行时错误发生之前无法看到错误。

答案 2 :(得分:0)

+1尝试使用MVC助手尽可能多地生成网址,因为您可以利用:

1)利用ASP.NET MVC的路由模板生成的url生成。因此,即使您碰巧更改/版本路由模板,通过帮助程序生成的URL也可以正确地重新生成这些URL。因此,链接不会被打破。

2)它们具有良好的过载,可提高可读性并且更加清洁    例如。使用匿名类型的路由值和html属性等而不是丑陋的连接

3)您可以将它们作为服务器标签包含在脚本中,以便基于网址生成方案生成相同的链接。