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中输出变量使用括号括起来

    有错留步指导,谢谢!

  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/szmgo/p/5182505.html
Copyright © 2011-2022 走看看