ASP.NET MVC学习之路由篇(3)

简介: 原文:ASP.NET MVC学习之路由篇(3)继ASP.NET MVC学习之路由篇(2)后继续学习。 11.根据路由输出链接       既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径。
原文: ASP.NET MVC学习之路由篇(3)

ASP.NET MVC学习之路由篇(2)后继续学习。

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 <a href="/">Index</a>
2 <a href="/Home/List">List</a>

因为当前的页面就是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 <a href="/User/Index/123">Index</a>
2 <a href="/Home/List/123">List</a>

 

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

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 <a href="/User/Index/123?fid=123&amp;sid=123">Index</a>
2 <a href="/Home/List/123?tid=asd&amp;asf=1">List</a>

 

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

到这里就结束了,因为你已经可以定位到某个控制器的某个方法。我相信有些有远见的人一定还知道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 <a href="/admin/Admin">Index</a>
2 <a href="/Home/List/123?tid=asd&amp;asf=1">List</a>

 

这里你或许会疑惑,为什么这里输出的路径是/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 <a class="cust" href="/admin/Admin" id="123">Index</a>
2 <a href="/Home/List/123?tid=asd&amp;asf=1">List</a>

 

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

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

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

 最终结果如下:

1 <a href="/Home/Index/123?sid=asd">Route</a>

 

 

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

@Url.Action

@Url.RouteUrl

在代码中则可以使用:

Url.Action

Url.RouteUrl

 

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

目录
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
30天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0
|
3月前
|
前端开发 Java 应用服务中间件
快速上手:探索Spring MVC的学习秘籍!
快速上手:探索Spring MVC的学习秘籍!
|
3月前
|
前端开发 Java 数据库
MVC架构学习归纳总结(小傅哥の码场 学习专栏)
MVC架构学习归纳总结(小傅哥の码场 学习专栏)
20 0
|
5月前
|
设计模式 前端开发 Java
一篇文章让使你的Spring Mvc学习入门,还不来了解吗?
一篇文章让使你的Spring Mvc学习入门,还不来了解吗?
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
51 0