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を除いて、残りのプレースホルダはパラメータと見なすべきである.例えば:
2)対応するパラメータをメソッドに記述する必要がある(ルーティングテーブルのパラメータ名とActionのパラメータ名が一致する.例えば:
3)ルーティングの検索順序は,一般に上から下への順である.
4)ルーティングパラメータの制約
5)ルーティングの制約をどのように高めるか
a.より多くのルーティングをルーティング検索の先頭に置く
b.特殊なルートをルーティングテーブルの一番後ろに
3.Urlルーティング、NULL処理
1)コントローラでのメソッド定義の場合、値タイプを空の値タイプに変更する必要がある場合は、値タイプの後に疑問符(?)を付けるだけです.しょり
2)Razorで出力変数をかっこで囲む
ミスがあったら、指導してください.ありがとうございます.
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で出力変数をかっこで囲む
ミスがあったら、指導してください.ありがとうございます.