ASP.NET MVC学习之路由篇(3)
根据路由输出链接
既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径。
首先我们的路由注册部分如下所示:

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&sid=123">Index</a>
2 <a href="/Home/List/123?tid=asd&asf=1">List</a>
这里我们可以发现&被编码了,这里的&就是&。同时也可以看到路由中不存在的参数采用了查询字符串的方式进行了传递。大家可能以为
到这里就结束了,因为你已经可以定位到某个控制器的某个方法。我相信有些有远见的人一定还知道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&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,因为class在C#中是关键字,所以我们需要加上@。
最终的结果如下:
1 <a class="cust" href="/admin/Admin" id="123">Index</a>
2 <a href="/Home/List/123?tid=asd&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
到这里我们的路由部分就全部结束了,当然如果各位看客有需要解析路由原理的可以留言。
ASP.NET MVC学习之路由篇(3)的更多相关文章
- ASP.NET MVC学习之路由篇(2)
7.解决与物理路径的冲突 当发送一个请求至ASP.NET MVC时,其实会检查网站中存不存在这个请求的物理路径文件,如果存在的话,就会直接将这个物理文件返回.但是有时候我们需要它执行控制器的某个方法, ...
- ASP.NET MVC学习之路由篇(1)
1.基本路由 RouteConfig.cs: 1 public class RouteConfig 2 { 3 public static void RegisterRoutes(RouteColle ...
- ASP.NET MVC学习之路由篇
约束路由 上面我们有一个{id}用来捕获参数的,但是你也发现了它可以捕捉任何字符串等等,但是我们有时需要限制它,比如让它只能输入数字,那么我们就可以使用正则表达式去约束它. 如下修改RouteConf ...
- ASP.NET MVC学习之控制器篇
一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...
- ASP.NET MVC学习之过滤器篇(2)
下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成 ...
- ASP.NET MVC学习之控制器篇扩展性
原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名 ...
- ASP.NET MVC学习之视图篇(2)
继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...
- ASP.NET MVC学习之过滤器篇(1)
一.前言 继前面四篇ASP.NET MVC的随笔,我们继续向下学习.上一节我们学习了关于控制器的使用,本节我们将要学习如何使用过滤器控制用户访问页面. 二.正文 以下的示例建立在ASP.NET MVC ...
- ASP.NET MVC学习之控制器篇(二)
原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(a ...
随机推荐
- Python学习(20)python操作mysql数据库_安装
win7系统下python3.4连接mysql数据库 1.到python官方网站下载最新python程序.根据系统有32,64位. 直接下一步,就可以安装成功. 2.在python官网中去下载 ...
- Java 14 类型信息
14 类型信息 运行是识别对象和类的信息 两种方式RTTI 假定编译时已经知道所有的类型反射 运行时发现和使用类的信息 1 RTTI //多态 创建一个具体的对象(Circle Square Tria ...
- iOS开发之总结
NO.1 要孜孜不倦的学习有句话叫技多不压身,编程本来就是一个更新换代非常快的工作.每年都有新的技术出现,我认为要成为一个出色的程序员只掌握一门语言肯定是不行的.那么,要怎么选择自己的第二门,甚至第三 ...
- z-index总结【转载http://www.cnblogs.com/mind/archive/2012/04/01/2198995.html】
元素位置重叠的背景常识 (x)html文档中的元素默认处于普通流(normal flow)中,也就是说其顺序由元素在文档中的先后位置决定,此时一般不会产生重叠(但指定负边距可能产生重叠).当我们用cs ...
- 【spring-quartz】 定时调度,时间设置
. CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 ...
- 【matlab】读写文件
save('pqfile.mat','M'); ('E:\我的坚果云\pqfile.mat','M'); 其他: http://blog.csdn.net/iqizheng/article/detai ...
- centos7 使用 omnibus包安装方式,安装 gitlab7.4
centos7 使用 omnibus包安装方式,安装 gitlab7.4 1: gitlab是一个开源的软件,类似于github.com那样的git代码管理仓库: 官网 https://about.g ...
- linux笔记:权限管理命令chmod,chown,chgrp,umask
权限对文件和目录的含义是不同的:对文件来说:读:可以查看文件内容写:可以修改文件内容执行:可以执行文件对目录来说:读:可以列出目录中的内容写:可以在目录中创建.删除文件执行:可以进入目录 能够更改文件 ...
- iOS动态部署方案
转载: iOS动态部署方案 前言 这里讨论的动态部署方案,就是指通过不发版的方式,将新的内容.新的业务流程部署进已发布的App.因为苹果的审核周期比较长,而且苹果的限制比较多,业界在这里也没有特别多的 ...
- Cmd Markdown 简明语法手册
『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 简明语法手册 标签: Cmd-Markdown 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 示例: 这是 ...