用c#递归输出一个ul列表
本文关键字:一个 ul 列表 递归 输出 | 更新日期: 2023-09-27 18:13:17
我试图从表中输出结果作为html ul-list。我将结果绑定到List<>。用最简单的方式,它是这样的。(我正在模拟绑定,但重要的是要知道我按此顺序对列进行排序)
List<Link> linkList = new List<Link>();
linkList.Add(new Link() { Id = 1, ParentId = null, Title = "Sport" });
linkList.Add(new Link() { Id = 2, ParentId = 1, Title = "Football" });
linkList.Add(new Link() { Id = 3, ParentId = 1, Title = "Handball" });
linkList.Add(new Link() { Id = 4, ParentId = 1, Title = "Golf" });
之后,我调用我的递归方法。
public HtmlString navigation { get; set; }
navigation = CreateNavigation(linkList);
protected static HtmlString CreateNavigation1(List<Link> linkList, string result = "", int? index = null)
{
int maxIndex = linkList.Count() - 1;
if (!index.HasValue)
index = maxIndex;
else
index--;
Link selectedLink;
if (index != 0)
{
selectedLink = linkList[index.Value];
if (index != maxIndex)
{
if (linkList[index.Value + 1].ParentId != selectedLink.ParentId)
{
return new HtmlString("<li id='"" + selectedLink.Id + "'">" + selectedLink.Title + "<ul>" + CreateNavigation1(linkList, result, index) + "</ul></li>");
}
else
{
return new HtmlString(CreateNavigation1(linkList, result, index) + "<li id='"" + selectedLink.Id + "'">" + selectedLink.Title + "</li>");
}
}
else
{
return new HtmlString(CreateNavigation1(linkList, result, index) + "<li id='"" + selectedLink.Id + "'">" + selectedLink.Title + "</li>");
}
}
else
{
selectedLink = linkList[index.Value];
if (linkList[index.Value + 1].ParentId.HasValue && linkList[index.Value + 1].ParentId.Value == selectedLink.Id)
{
return new HtmlString("<ul><li>" + selectedLink.Title + "<ul>" + result + "</ul></li></ul>");
}
else
{
return new HtmlString("<ul><li>" + selectedLink.Title + "</li>" + result + "</ul>");
}
}
}
当我单步时,我认为它应该运行,但当我看输出时,我不明白出了什么问题。这是结果
<ul><li>Sport<ul></ul></li></ul><li id="2">Football</li><li
id="3">Handball</li><li id="4">Golf</li>
我的愿望是它应该看起来像这样
<ul><li>Sport<ul><li id="2">Football</li><li id="3">Handball</li><li
id="4">Golf</li></ul></li></ul>
为什么结果附加在字符串后面而不是在字符串里面?我说
<ul><li>" + selectedLink.Title + "</li>" + append it here!(result) + "</ul>"
我认为哪里不对?
谢谢!
我没有检查你的代码有什么问题,而是检查了这个实现。
public string GetTree(List<Link> linkList) {
var sb = new StringBuilder();
sb.Append("<ul>");
foreach (var link in linkList) {
if (!link.ParentId.HasValue) {
sb.Append("<li>");
sb.Append(link.Title);
sb.Append(GetChildren(linkList, link.Id));
sb.Append("</li>");
}
}
sb.Append("</ul>");
return sb.ToString();
}
private string GetChildren(List<Link> linkList, int parentId) {
var sb = new StringBuilder();
var childList = from m in linkList
where m.ParentId == parentId
orderby m.Id
select m;
if (childList.Count() > 0) {
sb.Append("<ul>");
foreach (var link in childList) {
sb.Append("<li>");
sb.Append(link.Title);
sb.Append(GetChildren(linkList, link.Id));
sb.Append("</li>");
}
sb.Append("</ul>");
}
return sb.ToString();
}
navigation = new HtmlString(GetTree(linkList));