由于在这种情况下您要处理不同的类型,因此您必须在它们中的每一个上实现一个通用接口以使代码具有通用性。基本方法是创建一个包含任何所需属性(例如 DisplayText、ActionURL 等)的接口,然后递归地遍历集合。
这是一个粗略的例子:
public interface IDataItem
{
string DisplayText { get; }
string ActionUrl { get; }
bool HasChildren { get; }
IEnumerable<IDataItem> GetChildren();
}
public void CreateTree(HtmlTextWriter writer, IEnumerable<IDataItem> collection)
{
writer.WriteFullBeginTag("ul");
foreach (var data in collection)
{
writer.WriteFullBeginTag("li");
writer.WriteBeginTag("a");
writer.WriteAttribute("href",data.ActionUrl);
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(data.DisplayText);
writer.WriteEndTag("a");
if(data.HasChildren)
CreateTree(writer, data.GetChildren());
writer.WriteEndTag("li");
}
writer.WriteEndTag("ul");
}
您必须在要包含在树视图中的每种类型上实现接口。只需传入顶级类型的集合,上面的方法将沿着层次结构向下创建所需的嵌套列表。