2
我想动态地创建一个基本的ASP.NET TreeView控件。但是当我调用RenderControl()来获取它的输出时,ASP.NET会抛出空引用异常。当我在.ascx/aspx中声明一个不在这里发生的TreeView时,ASP.NET在幕后做了什么?如何以编程方式呈现ASP.NET TreeView?
断裂:
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
在什么情况下你想使这个控制? – womp 2010-08-10 23:55:05
在基于System.Web.UI.WebControls.WebControl的控件中。 HtmlTextWriter绝对有效。渲染更简单的控件(如TextBox)可以正常工作。 – Bryan 2010-08-11 00:07:17
我无法找到在代码隐藏中声明的TreeView的单个示例......非常令人沮丧。 – Bryan 2010-08-11 00:09:00