2016-04-09 15 views
0

Я использую механизм шаблонов DotLiquid, чтобы разрешить их использование в приложении.Свойства коллекции доступа в Dot Liquid

Внутри, у меня есть разбитый список из списка, который зарегистрирован как безопасный тип, позволяющий получить доступ к членам внутри. 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 }} | 

который замещается с

| 

Может кто-нибудь увидеть, где я неправильно?

ответ

1

Я подозреваю, что это не проблема с вашим кодом, но скорее это ограничение того, как DotLiquid (и Liquid) обрабатывает списки и коллекции. IIRC, вы не можете получить доступ к произвольным свойствам в списках и коллекциях.

Вы можете проверить это, изменив свой PaginatedList<T> так, чтобы он содержал List<T>, а не наследовал его.

+0

Спасибо Тиму, похоже, что это так. – EverythingGeek