zoukankan      html  css  js  c++  java
  • MVC的路由机制

    MVC的默认路由可以在Global.asax.cs文件的RegisterRoutes方法中设置,其结构非常的简单易用,可以匹配各种形式,

    路由配置可以由三个部分组成,最常见的就是{controller}/{action}/{id},只要这三个部分不连续出现,有间隔符,那么都可以匹配,

    比如可以是{controller}-{action}-{id},

    也可以是{controller}·{action}·{id},

    喜欢的话还可以添加各种奇怪的东西,比如 lalal/{controller}·{action}·{id},可以匹配lalal/controller·action·100酱紫

    不过要注意的问题是,路由匹配是根据加入顺序依次进行的,

    产品详情的链接是:http://localhost/ProductOffline/product/ProductDetail/142,

    产品目录的链接是:http://localhost/ProductOffline/ProductCategory/ProductCategoryDetail/25

    如果设置的路由是如下,先声明产品详情路由,再声明ProductCategory路由

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
           //产品详情路由 routes.MapRoute(
    "Default", // Route name "{controller}/{action}/{ID}",// URL with parameters new { controller = "product", action = "productlist",productid=UrlParameter.Optional} // Parameter defaults );        //产品目录路由 routes.MapRoute( "ProductCategory", // Route name "ProductCategory/ProductCategoryDetail/{ProductCategoryID}",// URL with parameters new { controller = "ProductCategory", action = "ProductCategoryDetail"} // Parameter defaults ); }

    那么在跳转 http://localhost/ProductOffline/ProductCategory/ProductCategoryDetail/25 时会报错,

    因为已经匹配到了第一个路由,而第一个路由中,是没有ProductCategoryController及ProductCategoryDetailAction

    
    

    所以,需要像下面这样写,就可以匹配到正确的路由了:)

     public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    "ProductCategory", // Route name
                    "ProductCategory/ProductCategoryDetail/{ProductCategoryID}",// URL with parameters
                    new { controller = "ProductCategory", action = "ProductCategoryDetail"} // Parameter defaults
    
                );
    
                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{ProductID}",// URL with parameters
                    new { controller = "product", action = "productlist",productid=UrlParameter.Optional} // Parameter defaults
                    
                );
    
            }
  • 相关阅读:
    前端 fetch 通信
    编写高质量的JavaScript代码(一)
    Redis学习笔记1-Redis的介绍和认识
    gitignore不起作用解决的方法
    【我的面经】说说简历的细节——软件开发岗位
    菜鸟的mongoDB学习---(七)MongoDB 备份(mongodump)与恢复(mongorerstore)
    HDU 4927 Series 1
    树状数组求第K小值 (spoj227 Ordering the Soldiers && hdu2852 KiKi's K-Number)
    git和SVN的差别
    KVM-Introduce
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/4204325.html
Copyright © 2011-2022 走看看