zoukankan      html  css  js  c++  java
  • 8.MVC框架开发(URL路由配置和URL路由传参空值处理)

    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=1)
            {
                //计算数据总数,计算分页总数,保留当前页数,保留分类id
                int pageSize = 4;
                int endNum = ((int)num - 1) * 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中输出变量使用括号括起来

    有错留步指导,谢谢!

  • 相关阅读:
    【Web-Components】document.registerElement
    Date
    类型转换
    【Web-Components】HTML imports
    【Web-Components】
    【Web-Components】Shadow Dom
    【Mobile】
    数据库读写分离
    HDU——T 1711 Number Sequence
    洛谷——P2957 [USACO09OCT]谷仓里的回声Barn Echoes
  • 原文地址:https://www.cnblogs.com/szmgo/p/5182505.html
Copyright © 2011-2022 走看看