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

原文: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

 

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

时间: 2024-11-02 16:31:38

ASP.NET MVC学习之路由篇(3)的相关文章

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

原文:ASP.NET MVC学习之路由篇(1) 一.前言       作为一个从ASP.NET转入到ASP.NET MVC的开发人员而言,可能在开发ASP.NET网站的时候就已经开始在使用路由了. 只不过在ASP.NET MVC中路由是关键部分,而在ASP.NET中需要自行加进去.下面我们将学习ASP.NET MVC中的路由 系统.   二.准备工作 1.新建一个ASP.NET MVC4项目 2.模板选择空 3.在Controllers中添加一个Home控制器 4.打开App_Start中的Ro

ASP.NET MVC学习之控制器篇

原文:ASP.NET MVC学习之控制器篇 前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1)  ASP.NET MVC学习之路由篇幅(2)  ASP.NET MVC学习之路由篇幅(3)    正文 1.  IController的使用 这个接口可能很多人都没有使用过,但是我们常用的Controller类实现了这个接口,而且只要实现这个接口就可以作为一个控制器,当然很多的内

ASP.NET MVC学习之控制器篇扩展性

原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展.   二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名问题,虽然方法的名称和参数一样,但是里面的逻辑是不一样的,因为你设置了对应的注解属性可以确定调用哪个动作方法.这个时候你就需要将动作的名称与方法的名称区别开来,那么你就可以使用ActionName注解属性.比如我们要求一个页面在本地访问与非本地访问时呈现不同的页面,但是你又想用不同的方法区分开来

ASP.NET MVC学习之过滤器篇(2)

原文:ASP.NET MVC学习之过滤器篇(2) 下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习.   3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成之后更改最终返回的结果,当然很多人一定不太明白这个到底可以干什么, 下面我们举一个比较实际的例子:   相信理解过网站的安全的一定知道跨站请求(CSRF具体可以自行百度,这里我就不去解释了),当然也有解决方案,那就是给页面中增加一个识别码,当页面

ASP.NET MVC学习之过滤器篇(1)

原文:ASP.NET MVC学习之过滤器篇(1) 一.前言 继前面四篇ASP.NET MVC的随笔,我们继续向下学习.上一节我们学习了关于控制器的使用,本节我们将要学习如何使用过滤器控制用户访问页面.   二.正文 以下的示例建立在ASP.NET MVC 4之上(VS2012)   1.授权过滤器 只要涉及用户的网站,都一定会涉及到什么权限的用户可以访问哪个页面.对于新手而言可能都在每个页面中单独写这个功能方法,导致的后果就是大量重复的代码,并且不便于以后的变动.有用一定经验之后,就会采用集中控

学习ASP.NET MVC(一) 开天辟地入门篇

一.摘要 随着ASP.NET MVC 1.0版本的正式发布, 我将本系列文章也更新到了1.0, 对于已经发表的文章我都会 根据1.0版本重新编辑. 希望本系列文章能打给大家帮助. 二.前言 ASP.NET MVC是微软官方提供的开源MVC框架. 在经过了漫长的preview和2个RC版本后, 终于发布了1.0 版本.其实从RC开始ASP.NET MVC的核心代码就已经趋于稳定.所以现在开始学习ASP.NET MVC是一个很好的 时间点.学习的早,而且不用担心知识过时. 本系列教程是我在学习ASP

ASP.NET MVC小结之基础篇(一)_实用技巧

前言:前几天要准备一个演讲,所以准备了MVC的一些基本的东西,以前也使用过MVC,但是只是使用,而不是去了解,所以趁着这个机会好好的把别人的MVC视频看了一下(是一个微软的MVP会员发布的视频,相信有些人都看过),整理除了这个笔记,共享一下子,基本MVC的所有东西都介绍了,但是都是很基础的东西.本来打算一篇发表完的,但是发现东西有点多,所以分成了两篇文章! 什么是ASP.NET MVC (1) ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架 (2)M

ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作

前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可以说自动推出以来,一直广受关注.在经历了漫长的Preview 之后,前几天终于推出了其beta版.并且在官方文档中,微软声明最终的正式版与beta版相比不会有大的变化.所以,对于.NET平台的开发人 员来说,是时候学习ASP.NET MVC了. 本系列文章作为一个ASP.NET MVC的入门教程,将不会长篇大论介绍其中的概念及理论.而是通过 案例实践来学习ASP.NET MVC.在这系列文章中我将逐步完成一个"公告发布

ASP.NET MVC小结之基础篇(二)_实用技巧

整理除了这个笔记,共享一下子,基本MVC的所有东西都介绍了,但是都是很基础的东西.本来打算一篇发表完的,但是发现东西有点多,所以分成了两篇文章,这是最后一篇了! 1.ASP.NET MVC请求过程 1 2.Controller (1) 控制器在ASP.NET MVC中扮演着处理客户端请求的角色 1)必须实现System.Web.Mvc.IController接口 ->通常直接继承System.Web.MVC.Controller类 2)必须要以Controller结尾 3)通过不同的Action