1

最近、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>

さて、このコードに関する私の問題は次のとおりです。

  1. 2 番目のステートメントは機能しません。明らかに、サーバー側のスクリプトがネストされているためです。
  2. それは非常に醜く、絶対に読むことができません (ページングが必要な各ページでこれを行っていると想像してください! しかし、痛み)。:(

より良い代替案はありますか?

4

3 に答える 3

2

if次のステートメントを使用できます。

<% if (Convert.ToInt32(ViewData["CurrentPage"]) <= 0) { %>
     Disabled template goes here...
<% } else { %> 
     Link template goes here...
<% } %>

ちなみに、一連のページに対してこれを行う場合は、ViewUserControlまたはでカプセル化できますViewMasterPage

于 2009-07-12T08:29:38.440 に答える
1

ここに別の解決策があります。追加<script runat="server">:

<script runat="server">
    protected string Prev10Url {
        get {
            return Convert.ToInt32(ViewData["CurrentPage"]) <= 0
                ? "javascript:void[]"
                : "/products/Page" + Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])+1);
        }
    }

    protected string Prev10Class {
        get {
            return Convert.ToInt32(ViewData["CurrentPage"]) <= 0
                ? "bgn disabled"
                : "";
        }
    }

    protected string Next10Url {
        get {
            ...
        }
    }

    protected string Next10Class {
        get {
            ...
        }
    }
</script>

次に、マークアップを変更します。

<a href="<%= Prev10Url %>" class="<%= Prev10Class %>">previous 10 products</a>
<a href="<%= Next10Url %>" class="<%= Next10Class %>">next 10 products</a>
于 2009-07-12T10:55:40.173 に答える