【发布时间】:2010-08-10 23:28:15
【问题描述】:
我正在尝试动态创建一个基本的 ASP.NET TreeView 控件。但是当我调用 RenderControl() 来获取它的输出时,ASP.NET 会抛出空引用异常。当我在 .ascx/aspx 中声明未在此处发生的 TreeView 时,ASP.NET 在幕后做了什么?
破碎:
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 writer, Int32 position, Boolean[] isLast, Boolean enabled) +2329
【问题讨论】:
-
你在什么情况下试图渲染这个控件?
-
在一个基于 System.Web.UI.WebControls.WebControl 的控件中。 HtmlTextWriter 绝对有效。渲染更简单的控件(如文本框)可以正常工作。
-
我在任何地方都找不到在代码隐藏中声明的 TreeView 的单个示例......非常令人沮丧。