Skip to content

Instantly share code, notes, and snippets.

@jwmcpeak
Created March 28, 2011 16:26

Revisions

  1. Jeremy McPeak revised this gist Nov 3, 2011. 1 changed file with 27 additions and 23 deletions.
    50 changes: 27 additions & 23 deletions RazorExtensions.cs
    Original file line number Diff line number Diff line change
    @@ -1,33 +1,37 @@
    // a quick and simple repeater helper method
    // header and footer templates could be added
    public static HelperResult Repeater<T>(
    this IEnumerable<T> items,
    Func<T, HelperResult> itemTemplate,
    Func<T, HelperResult> alternatingItemTemplate = null,
    Func<T, HelperResult> separatorTemplate = null)
    public static class RazorExtensions
    {
    return new HelperResult(writer =>

    // a quick and simple repeater helper method
    // header and footer templates could be added
    public static HelperResult Repeater<T>(
    this IEnumerable<T> items,
    Func<T, HelperResult> itemTemplate,
    Func<T, HelperResult> alternatingItemTemplate = null,
    Func<T, HelperResult> separatorTemplate = null)
    {
    if (items.Count() > 0)
    return new HelperResult(writer =>
    {
    var last = items.Last();
    int i = 0;

    foreach (var item in items)
    if (items.Count() > 0)
    {
    var func = (i % 2 != 0 && alternatingItemTemplate != null) ? alternatingItemTemplate : itemTemplate;

    func(item).WriteTo(writer);

    if (separatorTemplate != null && !item.Equals(last))
    var last = items.Last();
    int i = 0;

    foreach (var item in items)
    {
    separatorTemplate(item).WriteTo(writer);
    var func = (i % 2 != 0 && alternatingItemTemplate != null) ? alternatingItemTemplate : itemTemplate;

    func(item).WriteTo(writer);

    if (separatorTemplate != null && !item.Equals(last))
    {
    separatorTemplate(item).WriteTo(writer);
    }

    i++;
    }

    i++;
    }
    }
    });
    });
    }
    }

    // Usage
  2. jwmcpeak created this gist Mar 28, 2011.
    38 changes: 38 additions & 0 deletions RazorExtensions.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    // a quick and simple repeater helper method
    // header and footer templates could be added
    public static HelperResult Repeater<T>(
    this IEnumerable<T> items,
    Func<T, HelperResult> itemTemplate,
    Func<T, HelperResult> alternatingItemTemplate = null,
    Func<T, HelperResult> separatorTemplate = null)
    {
    return new HelperResult(writer =>
    {
    if (items.Count() > 0)
    {
    var last = items.Last();
    int i = 0;

    foreach (var item in items)
    {
    var func = (i % 2 != 0 && alternatingItemTemplate != null) ? alternatingItemTemplate : itemTemplate;

    func(item).WriteTo(writer);

    if (separatorTemplate != null && !item.Equals(last))
    {
    separatorTemplate(item).WriteTo(writer);
    }

    i++;
    }
    }
    });
    }

    // Usage
    @{
    var names = new string[] { "Jeremy", "Jason", "Jeffrey", "John", "Jethro" };
    }

    @names.Repeater(@<p class="classOne">@item</p>, alternatingItemTemplate: @<p class="classTwo">@item</p>, separatorTemplate: @<hr />)