在MVC下不是通过对物理文件的映射来实行访问的,而是通过定义后的路由Url来实现访问的。在前一篇讲到我们是在全局文件下进行路由配置。

routes.MapRoute(
               "Default",
                "{controller}/{action}/{id}",
               new { controller = "Home", action = "Index", id = UrlParameter.Optional }
           );

上面方法的三个参数分别是:路由名称,匹配的Url,默认的匹配路由。

对于第二个参数是要匹配的url,以'/'进行分隔,用反括号‘{}’包围起来的是占位符,其可以被其他的字符串所替换。而对于括号里面的字符串如controller,action,是MVC下默认的,对于controller,action占位符位置的字符串将被认为是控制器和方法名称。

对于第三个参数,是默认的路有值,当url中有缺省部分时,缺省的部分会到默认的路由值来寻找然后进行匹配,如输入http://localhost:7240/ 会去默认路由值查找对应的controller和action,想当于请求http://localhost:7240/Home/Index,对于http://localhost:7240/Blog/,这时是action/id缺省,还是会去查找默认路由值来填充action,也就是相当于请求http://localhost:7240/Blog/。注意,这里url的缺省是有一定规则的。可以全部缺省,或者缺省后面的部分,不能缺省前面的部分。

如果匹配的url是这样的形式 {id}/{other},{controller}/{id}/{other},{action}/{id}/{other} 对于缺省的controller和action会到默认路由值去寻找,找到后框架会自动帮助我们将默认路由值中controller和action对应的字符串作为我们请求的controller和action。也许我们会问,如果默认路由值为空,或者默认路由值我故意不设置controller和action那会怎样?如果在这种情况下,当我们输入模式合适的url时,会抛出异常"RouteData 必须包含名为“controller”且值为非空字符串的项。"

我们也可以在url中不用占位符,直接用字符常量来实现,"Home/{action}","{controller}/Index/{id}/{other}".其匹配规则也是和上面一致的。

通过在全局进行设置路由,可以构建我们的路由映射系统,这个路由映射系统有两个作用。一个就是我们上面提到的,将输入的url转交给相应的控制器和方法来处理。还有另外一个重要的作用。就是构建用于定位到相应的控制器和方法的类。如果我在全局文件下,构建了这个路由。

routes.MapRoute(
              "Index",
              "Home/{action}",
              new { controller = "Home", action = "Index", id = "x", other = "v" }
              );

我在前台使用   <%=Html.ActionLink("link","Index","Home")%> 生成的链接<a href="/Home">本来预计的链接是这样的:<a href="/Home/Index">

使用<%=Html.ActionLink("link","About","Home")%> 生成的链接<a href="/Home/About">,如果我将路由配置上面的"Home/{action}"修改为"MyHome/{action}"。可以发现上面的两个链接会变成<a href="/MyHome">和<a href="/MyHome/About">。这下知道原因了,就是我们的路由表设置之后会反向来作用我们Url的生成。这也说明了我们使用框架提供的HtmlHelprer的好处,有天我们想把链接由Home修改为MyHome的时候,只需在全局的路由表进行设置就可以了。无需到每个页面去改动。

MVC系统学习2—MVC路由的更多相关文章

  1. MVC系统学习1—MVC执行流程

    用MVC来做开发也有一段时间了,但是感觉一直没入门,就徘徊在似懂非懂的层次,和去年刚毕业学习WebForm时一样,当时通过张子阳老兄的几篇文章,明白了请求处理流程,页面生命周期才真正明白了WebFor ...

  2. Mvc系统学习9——Areas学习

    在Mvc2.0中,新增加了一个特性就是Areas.在没有有使用Areas的情况下,我们的Mvc项目组织是下面这样的.当项目庞大的时候,Controllers,Model,View文件下下面势必会有很多 ...

  3. MVC系统学习6—Filter

    Mvc的过滤器是特性类,可以使我们在执行Action之前,执行Action之后,执行Action发生异常时,编写相关的处理代码实现某些逻辑.下面是四个基本的Filter接口. 上面这四个基本的Filt ...

  4. MVC系统学习5——验证

    其实关于Mvc的验证在上一篇已经有讲过一些了,可以通过在我们定义的Model上面添加相应的System.ComponentModel.DataAnnotations空间下的验证属性.在服务器端通过Mo ...

  5. MVC系统学习3—ModelBinder

    在ASP.NET MVC中,每个请求都被映射到一个Action方法,我们可以在action的方法中定义相应类型的参数,View中通过post.get方式提交的request参数,只要名称一致就会对应到 ...

  6. MVC系统学习7—Action的选择过程

    在Mvc源码的ControllerActionInvoker的InvokeAction方法里面有一个FindAction方法,FindAction方法在ControllerDescriptor里面定义 ...

  7. MVC系统学习4—ModelMetaData

    在Mvc R2中,新引入了一些扩展方法,如后面带一个for的方法,这些扩展方法会根据Model的属性自定生成相应的Html元素,如Html.EditFor(Model=>Model.IsAppr ...

  8. MVC系统学习8——AsyncController

    关于为什么使用异步Controller,这里不做备忘,三岁小孩都懂.主要的备忘是如何使用AsyncController. //这个action以Async结尾,并且返回值是void public vo ...

  9. 跟我学ASP.NET MVC之十一:URL路由

    摘要: 在MVC框架之前,ASP.NET假定在请求的URLs和服务器硬盘文件之间有直接的关系.服务器的职责是接收浏览器请求,从相应的文件发送输出. 这种方法只能工作于Web表单,每一个ASPX页面既是 ...

随机推荐

  1. PCB 批量Word转PDF实现方法

    自上次公司电脑中毒带来的影响,导致系统自动生成的Word档PCB出货报告,通过公司邮件服务器以附件的方式发送给客户后,客户是无法打开或打开缓慢的现象,如果将Word档转为PDF后在客户端是可以正常打开 ...

  2. 【WIP_S4】栈

    创建: 2018/01/15 更新: 2018/01/24 更改标题 [[WIP_S3]堆] => [[WIP_S4]堆] 继续添加内容 更新: 2018/05/13 更改标题  [[WIP_S ...

  3. tomcat8的session共享实现方案

    tomcat8的session共享实现 下载tomcat 版本:apache-tomcat-8.0.53.zip 实现步骤,只需要两步 两个tomcat的server.xml都增加一样cluster配 ...

  4. 实数类型c++

    数据类型 定义标识符 数值范围 占字节数 有效位数 单精度浮点数 float -3.4E+38-3.4E+38 4(32位) 6-7位 双精度浮点数 double -1.7E+308-1.7E+308 ...

  5. object-c中实现特定一个或者多个页面横竖屏,其他界面保持竖屏显示。

    1.首先设置项目支持的屏幕方向.info.plist设置(自行设置) 2.写一个子类CusNavigationController 继承 UINavigationController,在CusNavi ...

  6. 268 Missing Number 缺失的数字

    给出一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数.案例 1输入: [3,0,1]输出: 2案例 2输入: [9,6,4,2,3,5,7, ...

  7. 第八届蓝桥杯省赛C/C++ A组第8题 包子凑数

    参考了http://blog.csdn.net/y1196645376/article/details/69718192 思路: 数论+完全背包. 实现: #include <iostream& ...

  8. 第八届蓝桥杯省赛C/C++ A组第4题 方格分割

    参考了http://blog.csdn.net/y1196645376/article/details/69718192,这个大哥的思路很巧妙. 思路: dfs. 实现: #include <i ...

  9. JS高级——Blob处理二进制文件

    https://www.cnblogs.com/hhhyaaon/p/5928152.html

  10. STM32的串口DMA收发以及双缓冲区的实现

    在使用STM32的UART的DMA功能总结如下: 首先上代码,这里采用STM32 的USART1作为Demo,RX的DMA为DMA1_Channel5,TX的DMA为DMA1_Channel4.初始化 ...