Я пытаюсь сделать свой сайт карту следующим образомКак рекурсивно получить категории и подкатегории их подкатегории
<ul>
<li>Cat1</li>
<li>Cat2
<ul class='sub2'>
<li>Cat21</li>
<li>Cat22</li>
<li>Cat23
<ul class='sub23'>
<li>Cat231</li>
<li>Cat232</li>
<li>Cat233
<ul class='sub233'>
<li>Cat2331</li>
<li>Cat2332</li>
<li>Cat2333</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Cat3
<ul class='sub3'>
<li>Cat31</li>
<li>Cat32</li>
<li>Cat33</li>
</ul>
</li>
<li>Cat4</li>
</ul>
поставщиком карты является Список объектов PostCategory
List<PostCategory> MapProvider=new List<PostCategory>();
///....MapProvider.add(...);
CategoryMapViewModel siteMap=new CategoryMapViewModel(MapProvider);
var map=siteMap.Map.ToString();
и объект PostCategory
public class PostCategory{
[Key]
public int? CategoryId{get;set;}
[StringLength(20/*50*/,MinimumLength=3)]
public string Name{get;set;}
[StringLength(250)]
public string Description { get; set; }
//relationship
public int? IdPostCategoryParent { get; set; }
}
Я написал некоторые вещи, но он не работает рекурсивно для подкатегорий с ubcategories: например: он работает на sub2, но не для sub23, sub332, суб ....
вот мой CategoryMapViewModel класс
public class CategoryMapViewModel
{
public HtmlString Map { get; private set; }
private List<int?> TakenIds = new List<int?>();
public CategoryMapViewModel(List<PostCategoryModels> categoriesModels)
{
string map = "";
map = BuildCategoriesMap(categoriesModels, map);
this.Map = new HtmlString(map);
}
private string BuildCategoriesMap(List<PostCategoryModels> categories, string map)
{
if (categories != null && categories.Count > 0)
{
map += "<ul>";
foreach (PostCategoryModels cat in categories)
{
if ((!cat.CategoryId.HasValue) || (cat.CategoryId.HasValue && (!TakenIds.Contains(cat.CategoryId))))
{
map += "<li>" + cat.Name;
List<PostCategoryModels> subCats = categories.Where(c => c.IdPostCategoryParent == cat.CategoryId).ToList();
if (subCats.Count() > 0)
{
//map += BuildCategoriesMap(subCats, map);
//BuildCategoriesMap(subCats, map);
map += BuildCategoriesMap(subCats, "");
}
map += "</li>";
}
TakenIds.Add(cat.CategoryId);
}
map += "</ul>";
}
return map;
}
}
я не прав? может ли кто-нибудь дать мне лучший и самый простой способ сделать это? если да, сделайте это! С уважением!
youuuupiiii !!!! Yeeeeeeeeeeeeeeeeeeees !!!! Вы правы и сейчас Это работает спасибо Мартин – Bellash
Это удовольствие :) –