日期:2014-05-16 浏览次数:20886 次
上一篇介绍了Asp.Net MVC 中,从Http Pipeline上接收到请求如何匹配,匹配限制,以及如何控制在指定命名空间查找,解析出controller和action,并传参。
这篇主要介绍如何使用路由完成url生成,实现页面跳转,以及customize一个路由。
路由配置使用默认生成的:
routes.MapRoute( name:"Default", url:"{controller}/{action}/{id}", defaults: new { controller ="Home", action = "Index", id = UrlParameter.Optional } );
最简单的方法是使用Html.ActionLink ,在home View里添加代码:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport"content="width=device-width" /> <title>ActionName</title> </head> <body> <div>The controller is:@ViewBag.Controller</div> <div>The action is: @ViewBag.Action</div> <div> @Html.ActionLink("This is an outgoing URL", "CustomVariable") </div> </body> </html>
这样就会生成:
<a href="/Home/CustomVariable">This is anoutgoing URL</a>
这样,实际上是生成了在当前controller内,指向另一个action的url。
使用Html.ActionLink生成链接的好处是什么,可以根据当前的路由配置,自动维护生成好的url,上例使用的是默认配置。例如如果路由配置改为:
routes.MapRoute("NewRoute","App/Do{action}", new { controller = "Home" });
使用同样的代码:
@Html.ActionLink("This is an outgoing URL","CustomVariable")
此时url连接就会生成为:
<a href="/App/DoCustomVariable">This is anoutgoing URL</a>
因为当我们访问home controller时,NewRoute 在默认路由之前被匹配到了,就会拿它的pattern来生成url了。
当一个请求来时,路由会检测:
1. Pattern
2. 路由限制
3. Assign给匿名对象的默认值,就是解析存在Route Dictionary 里面的那些值
最简单的方式:
@Html.ActionLink("Thistargets another controller", "Index", "Admin")
直接传入第二个参数,指向”admin”controller
生成url连接,同时传参
对于同一个controller:
@Html.ActionLink("This is anoutgoing URL", "CustomVariable", new {id = "Hello" })
跨controller传值:
@Html.ActionLink("Click me to go to anotherarea","Index", "Test",new {Id="aaa"},null)
注意,如果路由成功匹配了传值的参数名称,那么url就会以匹配的格式生成;如果路由匹配成功,可是传的值没有在路由模式中指定,那么就会以?param=value的形式传值。例如,对于以上actionlink,如果是路由:
routes.MapRoute("NewRoute","App/Do{action}", new { controller ="Home" })
那么生成的url连接就是: