Я создал небольшой ретранслятор HtmlHelper для asp.net MVC, и я хотел бы иметь возможность рекурсивно строить список древовидных стилей. Так что, если у <T>
есть дети, которые IEnumerable
Я хочу добавить их в список в виде вложений.Справка ASP.NET MVC Repeater
Вот то, что я так, для которых создает плоский список ...
public static MvcHtmlString Repeater<T>(this HtmlHelper html, IEnumerable<T> items,
Func<T, HelperResult> itemTemplate,
Func<string, HelperResult> containerTemplate,
Func<string, HelperResult> emptyTemplate)
{
if (items == null)
return MvcHtmlString.Create(HttpContext.Current.Server.HtmlDecode(emptyTemplate("No Results").ToHtmlString()));
if (items.Count() == 0)
return MvcHtmlString.Create(HttpContext.Current.Server.HtmlDecode(emptyTemplate("No Results").ToHtmlString()));
StringBuilder sb = new StringBuilder();
foreach (var item in items)
{
string content = itemTemplate(item).ToHtmlString();
//Here I would want to append the children to 'content' using containerTemplate and itemTemplate....
sb.Append(HttpContext.Current.Server.HtmlDecode(content));
}
return MvcHtmlString.Create(HttpContext.Current.Server.HtmlDecode(containerTemplate(sb.ToString()).ToHtmlString()));
}
Любая помощь будет принята с благодарностью.
Приветствия заранее.
Gifster
Спасибо, но это будет либо IEnumerable дети T, но я думаю, что я буду иметь идти с сильно типизированных версий этого повторителя ... – Andy
@Andy - извините, я не понял. Вы можете использовать отражение для перечисления свойств объекта, чтобы найти те, которые являются IEnumerable. Я обновлю. – tvanfosson
Знаете ли вы пример? – Andy