在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的时候,只需在全局的路由表进行设置就可以了。无需到每个页面去改动。

最新文章

  1. java的覆盖重写隐藏和C#中的不同
  2. 8.2 辅助 xUtils 3.0
  3. QQ JS_SDk相关功能接口
  4. JVM基本原理
  5. [Java] Tomcat环境变量设置
  6. 教你搭建SpringMVC框架( 更新中、附源码)
  7. ubuntu使用
  8. 出现Warning:Gradle version 2.10 is required. Current version is 2.8.
  9. 第二章 Spring MVC入门
  10. C# - dynamic 类型
  11. picturefill + picture 标签 实现兼容性很棒的 响应式图片 自适应 屏幕大小
  12. Maximum 贪心
  13. C# 跳转新的标签页
  14. 微信公众号的开发 Senparc.Weixin.dll使用
  15. 编写一个求和函数sum,使输入sum(2)(3)或输入sum(2,3),输出结果都为5
  16. JS中如何判断对象是对象还是数组
  17. selenium 3.0变化
  18. java元注解 @Target注解用法
  19. Python基础知识之疑点难点
  20. Zabbix的通知功能以及自定义脚本告警

热门文章

  1. UI Design Do&#39;s and Don&#39;ts
  2. P3953 逛公园(dp,最短路)
  3. js获取标签的三种方式
  4. VUE学习之计算属性computed
  5. JavaScript--userAgent
  6. C#结构体+结构体与类的区别
  7. mutiset HDOJ 5349 MZL&#39;s simple problem
  8. Rabin_Karp(hash) HDOJ 1711 Number Sequence
  9. Windows8.1查看已连接无线WIFI密码
  10. int 多少位,long 多少位