8.MVCフレームワーク開発(URLルーティング構成とURLルーティングパラメータ値処理)

3715 ワード

1.ASP.NETとMVCのルーティング要求処理
1)ASP.NETの処理
要求------応答要求(HttpModule)------処理要求(HttpHandler)------要求されたリソースを処理してクライアントに返す
2)MVCの処理
ASP.NETが派生し、要求、応答、処理、リソースがクライアントに返されるプロセスにも従います.
要求---URLRoutingModule(ルーティング要求に応答)---RoutingTable(ルーティングテーブルの検索)---ルーティングマッピングを生成し、どのコントローラ、どのaction、およびどのパラメータであるかを示すRouteオブジェクトを生成する---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ルーティング、NULL処理
1)コントローラでのメソッド定義の場合、値タイプを空の値タイプに変更する必要がある場合は、値タイプの後に疑問符(?)を付けるだけです.しょり
2)Razorで出力変数をかっこで囲む
ミスがあったら、指導してください.ありがとうございます.