使用ActionLink,BeginForm,TextBox等MVC HTML帮助程序而不是本机HTML标记有什么好处?

jps*_*ook 6 razor asp.net-mvc-3

在针对不同问题的SO响应中,用户表示它允许您避免将路由值硬编码到html链接标记中,但这不是真正有效,因为您必须将控制器,操作,区域等放入字符串,所以你仍然硬编码路线值.

这怎么样:

@Html.ActionLink(linkText: "MyLink", actionName: "MyAction", controllerName: "MyController", new { id = @myId }, new { area = "SomeArea"})
Run Code Online (Sandbox Code Playgroud)

比这更好:

<a href='/SomeArea/MyController/MyAction/myId'>MyLink</a>
Run Code Online (Sandbox Code Playgroud)

tva*_*son 3

仅当 (a) 您严格使用默认路由格式并且 (b) 您的应用程序始终安装在站点的根目录时,您的观察才是正确的。如果您不执行前者(例如创建一条前往 Home 控制器和 Help 操作的快捷路线 /help,然后通过引入具有更多操作的 Help 控制器来更改它,那么您将需要更新所有硬编码的锚标记。更好的替代方案是使用带有路由名称和其他可选参数的 RouteLink 帮助器。

对于后者,我通常使用单个服务器来进行大多数临时部署,并且应用程序并不位于站点根目录中,而是位于子目录中。生产部署是混合的,但许多应用程序安装在站点根目录下。使用助手可以让我忽略开发过程中的差异,因为助手在所有情况下都会正确构建相对于当前站点的 url。这非常有用,我什至通过 UrlHelper 将其用于脚本、CSS 文件、图像等,以确保为这些文件指定的任何路径不会在暂存和生产之间中断。