0

我正在使用 DotLiquid 模板引擎来允许在应用程序中进行主题化。

在其中,我有一个从 List 继承的分页列表,该列表已注册为安全类型,允许访问其中的成员。PaginatedList 来自应用程序中的更高层,并且不知道正在使用 Dot Liquid 的事实,因此使用 RegisterSafeType 而不是继承 Drop。

        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

您可能需要将继承的类标记为 [Serializable]。否则,您可以执行 {{MyVariable.MyList.size}} 来获取总数,假设它是基于数组的。

于 2019-04-10T18:27:42.227 回答
1

我怀疑这不是您的代码的问题,而是 DotLiquid(和 Liquid)如何处理列表和集合的限制。IIRC,您不能访问列表和集合上的任意属性。

您可以通过更改您的内容来测试它PaginatedList<T>,使其包含 a List<T>,而不是从它继承。

于 2016-04-10T18:31:03.330 回答