Я пытаюсь динамически создать базовый элемент управления ASP.NET TreeView. Но когда я вызываю RenderControl (), чтобы получить его вывод, ASP.NET выдает исключение нулевой ссылки. Что делает ASP.NET за кулисами, когда я объявляю TreeView в .ascx / aspx, которого здесь нет?
Поврежденная:
protected override void DoRender(HtmlTextWriter output)
{
TreeView treeview = new TreeView();
treeview.SkipLinkText = String.Empty; //omit this for exception on get_SpacerImageUrl
treeview.ImageSet = TreeViewImageSet.BulletedList;
TreeNode node = new TreeNode("Node 1");
node.ImageUrl = string.Empty;
node.ChildNodes.Add(new TreeNode("Subnode 1"));
node.ChildNodes.Add(new TreeNode("Subnode 2"));
treeview.Nodes.Add(node);
node = new TreeNode("Node 2");
node.ChildNodes.Add(new TreeNode("Subnode 1"));
node.ChildNodes.Add(new TreeNode("Subnode 2"));
node.ChildNodes.Add(new TreeNode("Subnode 3"));
treeview.Nodes.Add(node);
treeview.RenderControl(output);
}
Работает нормально:
<asp:TreeView ID="tvMenu" runat="server">
<Nodes>
<asp:TreeNode Text="Node 1">
<asp:TreeNode Text="Section 1"></asp:TreeNode>
<asp:TreeNode Text="Section 2"></asp:TreeNode>
<asp:TreeNode Text="Section 3"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="Node 2">
<asp:TreeNode Text="Section One"></asp:TreeNode>
<asp:TreeNode Text="Section Two"></asp:TreeNode>
<asp:TreeNode Text="Section Three"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
Исключение:
[NullReferenceException: ссылка на объект не установлена для экземпляра объекта.]
System.Web.UI.WebControls.TreeView.GetImageUrl (индекс Int32) +3089
System.Web.UI.WebControls.TreeNode.Render (модуль записи HtmlTextWriter, позиция Int32, логическое значение [] isLast, логическое значение включено) + 2329