2010-04-06 36 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>"); 

     } 
相關問題