2010-04-06 68 views
0

在ASPX 代码视图,我们可以像这样的代码:ASP.NET自定义服务器控件:嵌套项目

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

不过,列表项类不是服务器控件。 我们如何在我们的自定义服务器控件中做到这一点?也就是说,如何开发一个可以使这种标记风格起作用的类似ListItem的类?我正在构建一个类似于ListBox的服务器控件。

谢谢:)

+0

你想在代码后面实现这个东西吗? – 2010-04-06 09:35:19

+0

你怎么能这样做?我不明白这是什么问题。 – 2010-04-06 09:35:51

+1

我的猜测是他想用他自己的控制来实现这一点。像这样: 2010-04-06 09:42:28

回答

0

如果你想要做这么薄您控制您需要实现一个Control Designer

编辑补充:

此外还要检查ParseChildrenPersistChildrenDesignerSerializationVisibilityPersistenceMode属性。

+0

嗨,有没有一种简单的方法(例如,我只需要应用一些属性的属性或类型),使其工作在代码视图?我不需要完整的设计器支持。谢谢:) – 2010-04-06 11:39:56

+0

@Dylan在必要的属性上使用'DesignerSerializationVisibility'和'PersistenceMode'属性。 – 2010-04-06 14:11:01

+0

我在有问题的ListBox控件的ListItems(集合)属性上使用了[PersistenceMode(PersistenceMode.InnerProperty)]和[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]。我懂了,但编译代码(调用代码)时,编译器说:类型'ListItemCollection'没有名为'ListItem'的公共属性。 – 2010-04-07 02:06:28

1

创建一个继承自ListControl的类,出于各种原因,即使这可能不会为您提供完整的UI智能感知(关于设计器使用自定义程序集的方式),但它将支持添加列表项并管理一切为您。

+0

@Brian 其实,我正在开发一个树控件,但由于某种原因,我不应该使它从TreeNode派生,更不用说ListControl。这篇文章中的例子仅仅是为了简化ploblem的复杂性。 :) – 2010-04-07 01:58:46

0
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>"); 

     } 
相关问题