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++;
}