ASP.NET自定义服务器控件:嵌套项

ASP.NET自定义服务器控件:嵌套项,.net,asp.net,listitem,.net,Asp.net,Listitem,在aspx代码视图中,我们可以这样编码: <asp:ListBox runat="server"> <asp:ListItem Text="Item1" /> <asp:ListItem Text="Item2" /> </asp:ListBox> 但是,ListItem类不是服务器控件。 我们如何在自定义服务器控件中做到这一点?也就是说,如何开发一个类似ListItem的类来实现这种标记样式?我正在构建一个类似于列表框的服务

在aspx代码视图中,我们可以这样编码:

<asp:ListBox runat="server">
    <asp:ListItem Text="Item1" />
    <asp:ListItem Text="Item2" />
</asp:ListBox>

但是,ListItem类不是服务器控件。 我们如何在自定义服务器控件中做到这一点?也就是说,如何开发一个类似ListItem的类来实现这种标记样式?我正在构建一个类似于列表框的服务器控件


谢谢:)

如果您想对控件进行精简,您需要实现一个

编辑以添加:


并检查、和属性。

创建一个从ListControl继承的类,由于各种原因,即使这样也可能无法为您提供完整的UI智能感知(与设计器处理自定义程序集的方式有关),但它将支持添加列表项并为您管理所有内容。

受保护的覆盖无效渲染内容(HtmlTextWriter输出)
protected override void RenderContents(HtmlTextWriter output)
        {

            output.Write("<div><div class=\"UserSectionHead\">");

            Label l = new Label() { Text = Label };
            TextBox t = new TextBox() { Text = Text };
            l.AssociatedControlID = t.ID;
            l.RenderControl(output);

            output.Write("</div><div class=\"UserSectionBody\"><div class=\"UserControlGroup\"><nobr>");

            t.RenderControl(output);

            output.Write("</nobr></div></div><div style=\"width:100%\" class=\"UserDottedLine\"></div>");

        }
{ 输出。写入(“”); 标签l=新标签(){Text=Label}; TextBox t=newtextbox(){Text=Text}; l、 AssociatedControlID=t.ID; l、 渲染控制(输出); 输出。写入(“”); t、 渲染控制(输出); 输出。写入(“”); }
u想在代码隐藏上实现这一点吗?你怎么能做到呢?我不明白这有什么问题。我猜他想用自己的控件来实现这一点。像这样:对不起,我已经更新了帖子。谢谢。嗨,克里斯托夫·克莱斯,你说得对。嗨,有没有一种简单的方法(例如,我只需要对属性或类型应用一些属性)让它在代码视图中工作?我不需要完整的设计师支持。谢谢:)@Dylan在必要属性上使用
DesignerSerializationVisibility
PersistenceMode
属性。我在所讨论的ListBox控件的ListItems(集合)属性上使用了[PersistenceMode(PersistenceMode.InnerProperty)]和[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]。我得到了智能,但当我编译代码(调用代码)时,编译器说:“类型‘ListItemCollection’没有名为‘ListItem’的公共属性”。@Brian实际上,我正在开发一个树控件,但出于某种原因,我不应该让它派生自TreeNode,更不用说ListControl了。这篇文章中的例子只是为了简化问题的复杂性