博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC学习之路由篇(3)
阅读量:7079 次
发布时间:2019-06-28

本文共 3643 字,大约阅读时间需要 12 分钟。

继后继续学习。

 

11.根据路由输出链接

      既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径。

首先我们的路由注册部分如下所示:

1 namespace MvcStudy 2 { 3     public class RouteConfig 4     { 5         public static void RegisterRoutes(RouteCollection routes) 6         { 7             routes.Add(new Route("MyTest",new DonwloadHandler())); 8  9             routes.MapRoute(10                 name: "Default2",11                 url: "{controller}/{action}/{id}",12                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }13             );14         }15     }16 }

 

下面我们开始在Views\Home\Index.cshtml中输出路径(如果没有对应的控制器或页面请自行新建):

1 @Html.ActionLink("Index", "Index")2 @Html.ActionLink("List","List")

该方法的第一个是链接的名称,第二个是方法的名称。

 

最终在生成的页面中将是如下的代码:

1 Index2 List

因为当前的页面就是Views/Home/Index所以第一个直接输出的就是"/",其次就是第二个路径,默认是当前的控制器所以最后组成的路径是"/Home/List"

 

当然我们也可以手动指定某个控制器,比如下面的代码:

1 @Html.ActionLink("Index", "Index","User")2 @Html.ActionLink("List","List","User")

 这里我们使用了第三个参数,就是用来指定控制器的。

注:ActionLink方法传入的方法名和控制器名,并不会受当前是否存在这个控制器或这个方法。一样会按照路由的路径输出。

 

查看上面的路由中我们还可以发现还有一个id这个可选参数,当然你们一定会想知道如何使用ActionLink将这个参数传入,下面我们将代码改写成如下:

1 @Html.ActionLink("Index", "Index", "User", new { id = "123" }, null)2 @Html.ActionLink("List", "List", new { id = "123" })

 

这里博主有一个很奇怪的地方就是ASP.NET MVC3中的第一个的写法可以是@Html.ActionLink("Index", "Index", "User", new { id = "123" })

但是我演示的时候用的是MVC4,却要在后面加个null参数,否则最终输出的路径后面会有这样一个查询字符串(?Length=4),应该是将"User"这个

当作了路由参数。

 

继续查看最终生成的代码:

1 Index2 List

 

当然我们也不一定非要传递路由中有的参数,一样可以传递其他的参数,比如如下结果:

1 @Html.ActionLink("Index", "Index", "User", new { id = "123" , fid = "123", sid = "123"},null)2 @Html.ActionLink("List", "List", new { id = "123" ,tid = "asd",asf= "1"})

 

最终的结果如下所示:

1 Index2 List

 

这里我们可以发现&被编码了,这里的&就是&。同时也可以看到路由中不存在的参数采用了查询字符串的方式进行了传递。大家可能以为

到这里就结束了,因为你已经可以定位到某个控制器的某个方法。我相信有些有远见的人一定还知道ASP.NET MVC中还存在区域这个技术,那

么问题就出来了,我们如何定位到区域中的某个控制器的某个方法呢?

 

这里我们新建一个admin的区域,并且重新编译(如果不重新编译那么最后得出的路径中就会把区域作为查询字符串),然后将代码改写成如下:

1 @Html.ActionLink("Index", "Index", new { area = "admin", controller = "Admin" })2 @Html.ActionLink("List", "List", new { id = "123" ,tid = "asd",asf= "1"})

 

刷新页面,查看页面源代码得出:

1 Index2 List

 

这里你或许会疑惑,为什么这里输出的路径是/admin/Admin,明明指定了action参数,理应是/admin/Admin/Index,这个时候

我们可以打开Areas/admin/adminAreaRegistration.cs文件,如下:

1 namespace MvcStudy.Areas.admin 2 { 3     public class adminAreaRegistration : AreaRegistration 4     { 5         public override string AreaName 6         { 7             get 8             { 9                 return "admin";10             }11         }12 13         public override void RegisterArea(AreaRegistrationContext context)14         {15             context.MapRoute(16                 "admin_default",17                 "admin/{controller}/{action}/{id}",18                 new { action = "Index", id = UrlParameter.Optional }19             );20         }21     }22 }

 

你可以清楚的看到 new {action = "Index" , id = UrlParameter.Optional},关键就在这,因为注册路由的时候已经指定了action默认

Index,所以在上面我们输出路径的时候只输出了区域和控制器却没有方法。

 

上面我们仅仅只是简单的输出了链接,但是如今很多网站都会采用样式等等。那么我们如何给这个链接添加样式呢?

下面我们简单的给一个链接添加一个class样式:

1 @Html.ActionLink("Index", "Index", new { area = "admin", controller = "Admin" }, new {@class = "cust",id = "123" })2 @Html.ActionLink("List", "List", new { id = "123" ,tid = "asd",asf= "1"})

 

在这里指定class的时候我们没有直接写class,因为classC#中是关键字,所以我们需要加上@

最终的结果如下:

1 Index2 List

 

我们指定了class样式和id,当然你也可以指定其他的更多的参数。最后还要介绍一个方法:@Html.RouteLink,采用它更加的灵活,

因为参数全部采用了匿名的方式,比如下面这段:

1 @Html.RouteLink("Route", new { controller = "Home", action = "Index", id = "123", sid = "asd" })

 最终结果如下:

1 Route

 

 

如果你只想简单的输出链接的文本而不要a标签,可以使用下面的方法:

@Url.Action

@Url.RouteUrl

在代码中则可以使用:

Url.Action

Url.RouteUrl

 

到这里我们的路由部分就全部结束了,当然如果各位看客有需要解析路由原理的可以留言。

 

转载地址:http://dcpml.baihongyu.com/

你可能感兴趣的文章
python print 控制台输出中文
查看>>
如何用js判断一个对象是不是Array
查看>>
[C++] Deep copy ,Shallow copy, copy constructor,"="
查看>>
render httprequest
查看>>
lsattr, chattr
查看>>
redis key设置过期时间
查看>>
0514JS基础:操作document对象、事件、this
查看>>
Gtest:源码解析
查看>>
【杂题总汇】HDU2018多校赛第九场 Rikka with Nash Equilibrium
查看>>
获取FIle路径下所有文件的地址和名称
查看>>
11.HTML表单元素【中】
查看>>
浙大版《C语言程序设计(第3版)》题目集 练习3-4 统计字符 (15 分)
查看>>
oracle创建计划任务
查看>>
16进制转10进制
查看>>
windows 安装服务
查看>>
MySQL常用简单小命令
查看>>
ERROR: child process failed, exited with error number 100 mongodb报错
查看>>
epoll 使用小结
查看>>
基于TCP套接字实现的简单Demo
查看>>
OpenStack学习
查看>>