2016-04-09 6 views
0

Ich verwende die DotLiquid-Vorlagen-Engine, um Themes in einer Anwendung zu ermöglichen.Zugriff auf Auflistungseigenschaften innerhalb von Dot Liquid

Innerhalb, habe ich eine paginierte Liste, die von List erbt, die als ein sicherer Typ registriert ist und den Zugriff auf die Mitglieder erlaubt. Die PaginatedList kommt von einer höheren Stufe in der Anwendung und ist unwissend dafür, dass Dot Liquid verwendet wird, daher die Verwendung von RegisterSafeType anstelle von 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); 
     } 
    } 
} 

Diese Liste wird dann in local.Products die Ansicht ausgesetzt, arbeitet die Sammlung in Dot Flüssigkeit Iterieren in Ordnung.

Ich versuche jedoch, Zugriff auf die Eigenschaften zu erhalten, ich bekomme keine Fehler, aber keine Werte werden durch Dot Liquid ersetzt.

Ich bin mit

{{ local.Products.CurrentPage }} | 

die mit

| 

jedermann sehen kann, wo ich falsch werde ersetzt wird?

Antwort

1

Ich vermute, dass es kein Problem mit Ihrem Code ist, sondern eher eine Einschränkung dessen, wie DotLiquid (und Liquid) mit Listen und Sammlungen umgeht. IIRC, Sie können nicht auf beliebige Eigenschaften in Listen und Sammlungen zugreifen.

Sie können das testen, indem Sie Ihre PaginatedList<T> so ändern, dass sie eine List<T> enthält, anstatt von ihr zu erben.

+0

Danke Tim, es scheint, dass dies der Fall ist. – EverythingGeek