0

アプリケーションでテーマを設定できるようにするために、DotLiquid テンプレート エンジンを使用しています。

内部には、安全な型として登録されている List から継承したページ分割されたリストがあり、内部のメンバーにアクセスできます。PaginatedList はアプリケーションの上位層から取得されており、Dot Liquid が使用されているという事実を認識していないため、Drop を継承する代わりに RegisterSafeType を使用しています。

        Template.RegisterSafeType(typeof(PaginatedList<>), new string[] {
            "CurrentPage",
            "HasNextPage",
            "HasPreviousPage",
            "PageSize",
            "TotalCount",
            "TotalPages"
        });

 public class PaginatedList<T> : List<T>
{
    /// <summary>
    /// Returns a value representing the current page being viewed
    /// </summary>
    public int CurrentPage { get; private set; }

    /// <summary>
    /// Returns a value representing the number of items being viewed per page
    /// </summary>
    public int PageSize { get; private set; }

    /// <summary>
    /// Returns a value representing the total number of items that can be viewed across the paging
    /// </summary>
    public int TotalCount { get; private set; }

    /// <summary>
    /// Returns a value representing the total number of viewable pages
    /// </summary>
    public int TotalPages { get; private set; }

    /// <summary>
    /// Creates a new list object that allows datasets to be seperated into pages
    /// </summary>
    public PaginatedList(IQueryable<T> source, int currentPage = 1, int pageSize = 15)
    {
        CurrentPage = currentPage;
        PageSize = pageSize;
        TotalCount = source.Count();
        TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);

        AddRange(source.Skip((CurrentPage - 1) * PageSize).Take(PageSize).ToList());
    }

    /// <summary>
    /// Returns a value representing if the current collection has a previous page
    /// </summary>
    public bool HasPreviousPage
    {
        get
        {
            return (CurrentPage > 1);
        }
    }

    /// <summary>
    /// Returns a value representing if the current collection has a next page
    /// </summary>
    public bool HasNextPage
    {
        get
        {
            return (CurrentPage < TotalPages);
        }
    }
}

このリストは次に local.Products のビューに公開され、Dot Liquid でコレクションを反復すると正常に動作します。

ただし、内部のプロパティにアクセスしようとしていますが、エラーは発生していませんが、値が Dot Liquid に置き換えられていません。

私は使っている

{{ local.Products.CurrentPage }} |

置き換えられるもの

  |

誰が私が間違っているのかを見ることができますか?

4

2 に答える 2

1

コードの問題ではなく、DotLiquid (および Liquid) がリストとコレクションを処理する方法の制限であると思われます。IIRC では、リストとコレクションの任意のプロパティにアクセスできません。

を継承するのではなく、をPaginatedList<T>含むように変更することで、それをテストできます。List<T>

于 2016-04-10T18:31:03.330 に答える