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中輸出變量使用括號括起來

有錯留步指導,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM