在Asp.net WebForm开发中,我们通过a标签进行跳转时,通常的写法是:<a href="index.aspx">首页</a>,
在Asp.net MVC中我们也可以这样写:<a href="/Home/Index">首页</a>,这就是我要讲的MVC中超链接的第一种方法。
Asp.net MVC的请求是通过路由的规则来控制的:系统默认规则如下代码
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
规则是可以变的,当路由规则变化后,比如如下:
routes.MapRoute(
name: "Default",
url: "{controller}-{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
把{controller}/{action}中的斜线变成{controller}-{action}横杠,你也要修改<a href="/Home/Index">首页</a>的地址为<a href="/Home/Index">首页</a>,否则会报错,一个可以修改,如果你的项目中有1000个跳转,那是不可能手动修改的。
这个时候你可以用第二种方法就是Url.Action生成url地址,即:
<a href="<%: Url.Action("Index","Home") %>">UrlHelper生成的url地址</a>
这样不论你的路由规则如何变化,它是不会受影响的,它会自适应路由规则,还有第三种中也可以自适应规则,
就是用UrlHelper生成url地址,即:
@Html.ActionLink("首页","Index","Home")
综上所看:
第二,第三种方法可以屏蔽路由变化带来的影响!