1.ASP.NET和MVC的路由请求处理

1)ASP.NET的处理

请求---------响应请求(HttpModule)--------处理请求(HttpHandler)--------把请求的资源处理之后返回给客户端

2)MVC的处理

由ASP.NET衍生出来,也遵循请求、响应、处理、资源返回给客户端的过程

请求-----URLRoutingModule(响应路由请求)-----RoutingTable(路由表)(检索请求路径是否和路由表里的路由匹配)-----生成一个路由映射,生成一个Route对象(告诉你是哪个controller、哪个action和哪个参数)-----MvcHandler处理-----响应回给客户端

注:

URLRoutingModule也是继承自IHttpModule接口的

MvcHandler也是继承自IHttpHandler接口的

2.路由传参

1)首先在路由中定义参数,除了控制器和Action之外,其余的占位符就应该认为是参数,比如:

 routes.MapRoute(
"Default1",//路由名称
"{controller}/{action}/page_{id}_{num}",//带有参数的URL id num都为参数
new { controller = "Book", action = "List" },
new { id = @"\d", num = @"\d" }
);

2)需要在方法里去编写相对应的参数(路由表里的参数名字和Action里面的参数名字一致,比如:

public ActionResult List(int? id,int? num=)
{
//计算数据总数,计算分页总数,保留当前页数,保留分类id
int pageSize = ;
int endNum = ((int)num - ) * pageSize;
var sum = bookshop.Books.Where(p => p.CategoryId == (int)id).ToList();
int sumTotal = sum.Count();//数据总数
int pageTotal = Convert.ToInt32(Math.Ceiling(sumTotal * 1.0 / pageSize));//分页总数
int nowNum = (int)num;//当前页数
ViewBag.sumTotal = sumTotal;
ViewBag.pageTotal = pageTotal;
ViewBag.nowNum = nowNum;
ViewBag.typeId = id;
List<Book> listPage = bookshop.Books.Where(p => p.CategoryId == (int)id).OrderBy(p => p.Id).Skip(endNum).Take(pageSize).ToList();
return View(listPage);
}

3)路由的检索顺序,一般都遵循的是从上到下的顺序

4)路由参数的约束

 routes.MapRoute(
"Default1",//路由名称
"{controller}/{action}/page_{id}_{num}",//带有参数的URL id num都为参数
new { controller = "Book", action = "List" },
new { id = @"\d", num = @"\d" }//约束
);

5)如何提升路由的约束

a.将匹配更多路由放在路由检索最前面

b.把特殊的路由至于路由表的最后面

3.Url路由传参,空值处理

1)在控制器中的方法定义的时候,需要将值类型变为可空的值类型时,只需要在值类型的后面加问号(?)处理

2)在Razor中输出变量使用括号括起来

有错留步指导,谢谢!

8.MVC框架开发(URL路由配置和URL路由传参空值处理)的更多相关文章

  1. Spring mvc框架 controller间跳转 ,重定向 ,传参

     一.需求背景     1. 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示.   @Req ...

  2. ASP.NET MVC框架开发系列课程 (webcast视频下载)

    课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...

  3. ThinkPHP5.0框架开发--第4章 TP5.0路由

    ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...

  4. 了解MVC框架开发

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言:本篇文章我们浅谈下MVC各个部分,模型(model)-视图(view)-控制器(controller), 以及路由. 对于使用MVC的好处大 ...

  5. 10.MVC框架开发(Ajax应用)

    1.MVC自带的Ajax应用, 使用步骤: 第一步,引入js框架 <script src="../../Scripts/jquery-1.4.4.js" type=" ...

  6. 2.MVC框架开发(视图开发----基础语法)

    1.区别普通的html,在普通的html中不能将控制器里面的数据展示在html中. 在MVC框架中,它提供了一种视图模板(就是结合普通的html标签并能将控制器里传出来的数据进行显示) 视图模板特性: ...

  7. 【原创】一篇学会vue路由配置 、 动态路由 、多层路由(实例)

    先来看看效果图: 为了方便讲解,我没有使用vue脚手架,如果需要的,可以留言跟我要.不多说开工: 首先,html先组上 <div id="app"> <div&g ...

  8. vue动态路由配置,vue路由传参

    动态路由: 当我们很多个页面或者组件都要被很多次重复利用的时候,我们的路由都指向同一个组件,这时候从不同组件进入一个"共用"的组件,并且还要传参数,渲染不同的数据 这就要用到动态路 ...

  9. [Android] 配置build.gradle 动态传参

    (1)一个Android工程中有一个build.gradle是负责Project范围的,而Module中又有各自的build.gradle是专门负责模块的. (2)在Gradle中Task是一等公民, ...

随机推荐

  1. 【转】Adobe CC 的下载地址

    http://trials3.adobe.com/AdobeProducts/AEFT/12/win64/AfterEffects_12_LS20.7z http://trials3.adobe.co ...

  2. 一款仿36氪iOS版APP源码

    Features 离线缓存 解决视频播放器的网速慢卡顿 视频播放器调用简单 cell自适应高度 cell中嵌套webView cell中嵌套webView 条件实时搜索 Known problems ...

  3. OC中字典:NSDictionary类是如何使用的

    字典就是关键字及其定义(描述)的集合.Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象).然后你就可以用这个关键字来 ...

  4. mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual t

    1.备份mysql数据库时候出错,导出数据: [root@localhost ~]# mysqldump -uroot -p mysql >/root/bck.sql Enter passwor ...

  5. [Laravel]配置路由小记

    Laravel:4.2 使用的后台是:laravel-backend php artisan routes 使用这个代码,可以看到显示目前项目的路由器 ,我需要添加功能,我就需要添加路由 /* |-- ...

  6. java基础总结

    /查看数组是否为空 String[] aorgPks = userRole.getAssignOrgPks(); if(ArrayUtils.isEmpty(aorgPks)){ //uapstudi ...

  7. 【高级JEE技术】JMX

    JMX即Java Manager Extentin(java 管理扩展)一种动态改变javabean属性值的技术,具体应用场景可以有很多.比如使用JMX作为线上应用的开关,在做一些新老系统改造的时候 ...

  8. 4 WPF学习---系统的学习XAML语法

    转载:http://blog.csdn.net/fwj380891124/article/details/8093001 1,XAML文档的树形结构: UI在用户眼里面是个平面结构.如下图所示,在用户 ...

  9. Java算法求最大最小值,冒泡排序,斐波纳契数列一些经典算法<不断更新中>

    清明在家,无聊,把一些经典的算法总结了一下. 一.求最大,最小值 Scanner input=new Scanner(System.in); int[] a={21,31,4,2,766,345,2, ...

  10. 利用wireshark抓取Telnet的用户名和密码

    使用wireshark抓取Telnet   目标ip地址(telnet  192.168.88.1 ) 1,首先打开wireshark,然后选择网卡,点击开始. 2,为了在filter中输入telne ...