2010-06-16 66 views
1

我希望我的用戶控件能夠在其中包含文字內容。例如:ASP.NET自定義控件 - 允許文字內容的模板

<fc:Text runat="server">Please enter your login information:</fc:Text> 

目前爲我的用戶控件的代碼是:

<ParseChildren(True, "Content")> _ 
Partial Public Class ctrFormText 
    Inherits UserControl 

    Private _content As ArrayList 

    <PersistenceMode(PersistenceMode.InnerDefaultProperty), _ 
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _ 
    TemplateInstance(TemplateInstance.Single)> _ 
    Public Property Content() As ArrayList 
     Get 
      If _content Is Nothing Then 
       Return New ArrayList 
      End If 
      Return _content 
     End Get 
     Set(ByVal value As ArrayList) 
      _content = value 
     End Set 
    End Property 

    Protected Overrides Sub CreateChildControls() 
     If _content IsNot Nothing Then 
      ctrChildren.Controls.Clear() 
      For Each i As Control In _content 
       ctrChildren.Controls.Add(i) 
      Next 
     End If 
     MyBase.CreateChildControls() 
    End Sub 
End Class 

當我把文本此控件(如上面)我得到這個錯誤:

Parser Error Message: Literal content ('Please enter your login information to access CKMS:') is not allowed within a 'System.Collections.ArrayList'. 

此控件可能包含其他內容而不僅僅是文本,因此將Content屬性設置爲屬性不會解決我的問題。

我發現在一些地方,我需要實現一個ControlBuilder類,以及另一個類實現IParserAccessor。

無論如何,我只是希望我的默認「內容」屬性具有允許在其中的所有類型的控件,包括文字和實際控件。

回答

0

您需要將ParseChildren屬性設置爲「False」,否則控件中的任何內容都將被解析爲「Content」屬性。這不符合您的需求,因爲您想擁有控件和內容。

爲了做到這一點,請覆蓋AddParsedSubObject方法。檢查解析的控件類型,如果它是文字控件,請將其添加到您的UserControl的Content屬性中。如果是其他控件,只需像往常一樣將它添加到Controls集合。

解析所有子對象後,只需在文字控件或面板中顯示Content屬性即可。

相關問題