最近、ASP.NET MVC で厄介な状況に苦しんでいます。簡単に
説明すると、すべての製品を一覧表示するビューがあるはずです。これらの製品が多すぎるため、ページングしています (非常に革新的です!)。このページには、「次の 10 製品」、「および前の 10 製品」という 2 つのページング矢印が含まれています。ビューには、IEnumerable<Product>
表示される製品のリストを含むコレクションが渡されます。ビューには、ViewData 項目として 2 つの整数 (currentPage、totalPages) も渡されます。今私が達成する必要があるのは、それが最初のページ (ViewData["CurrentPage"] == 0) であるかどうかを確認することです。「前の 10 ページ」リンクの css クラスを無効に変更する必要があるため、次のようなものを思いつきました。続く
<a href="/Products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])-1)%>/"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 1 ? "bgn disabled" : ""%>">
previous 10 products
</a>
これはうまくいきましたが、まだ問題があります。リンクは無効になっているか、具体的にグレー表示されていますが、それでも有効な URL を指しているため、CurrentPage 変数に基づいてリンクの href 属性を実際に変更しようとしました。コードは次のようになります (純粋な醜さを受け入れる準備をしてください)。
<a href="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"javascript:void[]" :
"/products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])+1)%>/" %>"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"bgn disabled" :
""%>">
previous 10 products
</a>
さて、このコードに関する私の問題は次のとおりです。
- 2 番目のステートメントは機能しません。明らかに、サーバー側のスクリプトがネストされているためです。
- それは非常に醜く、絶対に読むことができません (ページングが必要な各ページでこれを行っていると想像してください! しかし、痛み)。:(
より良い代替案はありますか?