diff --git a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs index 9010c13fc..c00dfdb4e 100644 --- a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs +++ b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs @@ -105,34 +105,62 @@ namespace Orchard.Mvc.Html { } private static IHtmlString UnorderedList(IEnumerable items, Func generateContent, string cssClass, Func generateItemCssClass, Func generateAlternatingItemCssClass) { - if (items == null || !items.Any()) return new HtmlString(string.Empty); + if(items == null) { + return new HtmlString(string.Empty); + } + + // prevent multiple evaluations of the enumeration + items = items.ToArray(); + + if (!items.Any()) { + return new HtmlString(string.Empty); + } var sb = new StringBuilder(250); int counter = 0, count = items.Count() - 1; - sb.AppendFormat( - !string.IsNullOrEmpty(cssClass) ? "
    " : "
      ", - cssClass - ); + if(string.IsNullOrEmpty(cssClass)) { + sb.Append("
        "); + } + else { + sb.Append("
          "); + } foreach (var item in items) { var sbClass = new StringBuilder(50); - if (counter == 0) + if (counter == 0) { sbClass.Append("first "); - if (counter == count) - sbClass.Append("last "); - if (generateItemCssClass != null) - sbClass.AppendFormat("{0} ", generateItemCssClass(item)); - if (counter % 2 != 0 && generateAlternatingItemCssClass != null) - sbClass.AppendFormat("{0} ", generateAlternatingItemCssClass(item)); + } - sb.AppendFormat( - sbClass.Length > 0 - ? string.Format("
        • {{0}}
        • ", sbClass.ToString().TrimEnd()) - : "
        • {0}
        • ", - generateContent(item, counter) - ); + if (counter == count) { + sbClass.Append("last "); + } + + if (generateItemCssClass != null) { + sbClass.Append(generateItemCssClass(item)).Append(" "); + } + + if (counter % 2 != 0 && generateAlternatingItemCssClass != null) { + sbClass.AppendFormat(generateAlternatingItemCssClass(item)).Append(" "); + } + + var clss = sbClass.ToString().TrimEnd(); + + if(String.IsNullOrWhiteSpace(clss)) { + sb.Append("
        • ") + .Append(generateContent(item, counter)) + .Append("
        • "); + } + else { + sb.Append("
        • ") + .Append(generateContent(item, counter)) + .Append("
        • "); + } counter++; }