Asp.NetMVC 3インスタンス学習のExtShop(四)——製品リストページの完成
8846 ワード
製品リストページを作成する前に、いくつかの準備をします.まずMvcPagerをダウンロードして製品リストのページを分けました.ダウンロードしたのはMVC 2ベースかもしれませんが、大丈夫です.MVC 3に使えます.心配があれば、ソースコードをダウンロードして再コンパイルしたほうがいいです.ダウンロード後にDLLをリファレンスに追加します.
次に、「Catalog/List/[id]/[page]」へのアクセスを実現するためにルーティングを変更します.Global.asax.csファイルを開き、デフォルトのルーティングの前に次のコードを追加します.
CatalogControllerを開きます.csファイル、ファイルヘッダにMvcPagerへの参照を追加します.コードは以下の通りです.
次にIndex操作のコードを変更します.
コードが入力されたidは、製品分類符号化ではなくページ番号であることに注意してください.ページングを使用するため、ビューに渡されるのはPagedListオブジェクトで、Queryableではなく、これも注意すべき点です.したがって,クエリ結果はtoPagedListメソッドによりQueryableオブジェクトをPagedListオブジェクトに変換する必要がある.1番目のパラメータは現在のページで、idが空の場合はデフォルトで1ページ目です.2番目のパラメータは、ページごとに表示される製品数で、ここでは8つです.
「Index」を右クリックして「ビューを追加」を選択します(、今日は中国語版に変更してメニューも変わりました).ビューに次のコードを追加します.
コードの最初の文はMvcPagerを参照し、2番目の文は受信したデータモデルタイプを定義します.だから製品リストなのでPageData["id"]は空の文字列に設定します.残りのコードとトップページの差は多くありません.34文目はHTML方式でページングコードを表示します.ここで注意したいのは、操作で受信した現在のページパラメータがidで定義されているため、PagerOptionsオプションのPageIndexParameterNameをidに設定することです.
ページは正常に表示する必要があり、Siteで表示する必要があります.cssに次のコードを追加します.
コードから分かるように、List操作には2つのパラメータがあり、1つ目は分類id、2つ目は現在のページ番号である.3行目は、現在の分類idをViewData["id"]を介してビューに渡し、左の分類リストを更新し、ナビゲーションバーを表示します.残りとIndexの操作はあまり差がありません.リスト操作のビューを作成します.ビュー内のコードは次のとおりです.
コード10行目には、ナビゲーションメニューが1つのセクションビューで表示されます.35行目では、PageIndexParameterNameはIndexビューのidではなくpageであることに注意してください.
次に行うのは、ナビゲーションバーの表示を完了することです.ファイルをCatalogControllerに戻す.csファイル、「Navbar」という名前のサブアクションを追加します.コードは次のとおりです.
コードは、まず現在の分類の親クラス番号を取得し、データベースからすべてのカテゴリを一度にクエリーしてソートします.サブオペレーションの分割ビューを作成します.ビューコードは次のとおりです.
コードの中で、">>の表示は必ずHtmlのRawの方法で表示しなければならなくて、さもなくばエラーを提示することができて、">"を使ってもだめで、Razorの文法と衝突があると推定します.他に方法があるかどうか、検討しなかった.
これで、製品リストページは完了しました.
BTW:プロジェクトはまだ完成していないので、ソースコードの提供は考えていませんが、文章を読むと同時にソースコードを提供して参考にしたい読者がいるので、本稿から、一節を完成するたびに、その節のコードを提供します.
ソース:http://download.csdn.net/source/2996287
次に、「Catalog/List/[id]/[page]」へのアクセスを実現するためにルーティングを変更します.Global.asax.csファイルを開き、デフォルトのルーティングの前に次のコードを追加します.
- routes . MapRoute (
- " Catalog " , // Route name
- " Catalog/List/{id}/{page} " , // URL with parameters
- new { controller = " Catalog " , action = " List " , page = 1 } // Parameter defaults
- ) ;
CatalogControllerを開きます.csファイル、ファイルヘッダにMvcPagerへの参照を追加します.コードは以下の通りです.
- using Webdiyer . WebControls . Mvc;
次にIndex操作のコードを変更します.
- public ActionResult Index ( int? id )
- {
- PagedList q = dc . T_Products . OrderByDescending ( m = > m . CreateTime ) . ToPagedList ( id ?? 1 , 8 ) ;
- return View ( q ) ;
- }
コードが入力されたidは、製品分類符号化ではなくページ番号であることに注意してください.ページングを使用するため、ビューに渡されるのはPagedListオブジェクトで、Queryableではなく、これも注意すべき点です.したがって,クエリ結果はtoPagedListメソッドによりQueryableオブジェクトをPagedListオブジェクトに変換する必要がある.1番目のパラメータは現在のページで、idが空の場合はデフォルトで1ページ目です.2番目のパラメータは、ページごとに表示される製品数で、ここでは8つです.
「Index」を右クリックして「ビューを追加」を選択します(、今日は中国語版に変更してメニューも変わりました).ビューに次のコードを追加します.
- @ using Webdiyer . WebControls . Mvc ;
- @ model PagedList
-
- @ {
- ViewBag . Title = " " ;
- PageData [ " id " ] = " " ;
- }
-
-
-
-
-
- @ {
- foreach ( var c in Model )
- {
-
-
- @ c . Title
- : @ c . MarketPrice . ToString ( " C " )
- : @ c . UnitPrice . ToString ( " C " )
- :
-
-
-
-
-
-
-
-
-
- }
- }
-
- @ Html . Pager ( Model , new PagerOptions { PageIndexParameterName = " id " } )
-
-
-
- jQuery ( function ( ) {
- $ ( " div .rating " ) . stars ( ) ;
- } ) ;
-
コードの最初の文はMvcPagerを参照し、2番目の文は受信したデータモデルタイプを定義します.だから製品リストなのでPageData["id"]は空の文字列に設定します.残りのコードとトップページの差は多くありません.34文目はHTML方式でページングコードを表示します.ここで注意したいのは、操作で受信した現在のページパラメータがidで定義されているため、PagerOptionsオプションのPageIndexParameterNameをidに設定することです.
ページは正常に表示する必要があり、Siteで表示する必要があります.cssに次のコードを追加します.
- 1 #contentMain .clear { clear : both ; }
- 2 #contentMain .pagenav { width : 760px ; text-align : center ; margin-bottom : 10px ; }
- CatalogController.cs , Index List , :
- 1 public ActionResult List(string id, int? page)
- 2 {
- 3 ViewData["id"] = id;
- 4 PagedList q = dc.T_Products
- 5 .Where(m => dc.T_Categories.Where(n => n.CategoryID.Substring(0, id.Length) == id).Select(n => n.CategoryID ).Contains(m.CategoryID))
- 6 .OrderByDescending(m => m.CreateTime).ToPagedList(page ?? 1, 4);
- 7 return View(q);
- 8 }
コードから分かるように、List操作には2つのパラメータがあり、1つ目は分類id、2つ目は現在のページ番号である.3行目は、現在の分類idをViewData["id"]を介してビューに渡し、左の分類リストを更新し、ナビゲーションバーを表示します.残りとIndexの操作はあまり差がありません.リスト操作のビューを作成します.ビュー内のコードは次のとおりです.
- @ using Webdiyer . WebControls . Mvc ;
- @ model PagedList
- @ {
- ViewBag . Title = " " ;
- PageData [ " id " ] = ViewData [ " id " ] ;
- }
-
-
-
- @ { Html . RenderAction ( " Navbar " , " Catalog " , new { id = ViewData [ " id " ] } ) ; }
-
-
-
- @ {
- foreach ( var c in Model )
- {
-
-
- @ c . Title
- : @ c . MarketPrice . ToString ( " C " )
- : @ c . UnitPrice . ToString ( " C " )
- :
-
-
-
-
-
-
-
-
-
- }
- }
-
- @ Html . Pager ( Model , new PagerOptions { PageIndexParameterName = " page " } )
-
-
-
- jQuery ( function ( ) {
- $ ( " div .rating " ) . stars ( ) ;
- } ) ;
-
コード10行目には、ナビゲーションメニューが1つのセクションビューで表示されます.35行目では、PageIndexParameterNameはIndexビューのidではなくpageであることに注意してください.
次に行うのは、ナビゲーションバーの表示を完了することです.ファイルをCatalogControllerに戻す.csファイル、「Navbar」という名前のサブアクションを追加します.コードは次のとおりです.
- [ ChildActionOnly ]
- public ActionResult Navbar ( string id )
- {
- List idlist = new List ( ) ;
- idlist . Add ( id ) ;
- for ( int i = 0 ; i
- {
- idlist . Add ( id . Substring ( 0 , i + 3 ) ) ;
- }
- var q = dc . T_Categories . Where ( m = > idlist . Contains ( m . CategoryID ) ) . OrderBy ( m = > m . CategoryID ) ;
- return PartialView ( q ) ;
- }
コードは、まず現在の分類の親クラス番号を取得し、データベースからすべてのカテゴリを一度にクエリーしてソートします.サブオペレーションの分割ビューを作成します.ビューコードは次のとおりです.
- @ model IEnumerable
-
- @ {
- foreach ( var c in Model )
- {
- @ Html . Raw ( " >> " ) @ c . Titel
- }
- }
コードの中で、">>の表示は必ずHtmlのRawの方法で表示しなければならなくて、さもなくばエラーを提示することができて、">"を使ってもだめで、Razorの文法と衝突があると推定します.他に方法があるかどうか、検討しなかった.
これで、製品リストページは完了しました.
BTW:プロジェクトはまだ完成していないので、ソースコードの提供は考えていませんが、文章を読むと同時にソースコードを提供して参考にしたい読者がいるので、本稿から、一節を完成するたびに、その節のコードを提供します.
ソース:http://download.csdn.net/source/2996287