I want my User Control to be able to have Literal Content inside of it. For Example:
<fc:Text runat="server">Please enter your login information:</fc:Text>
Currently the code for my user control is:
<ParseChildren(True, "Content")> _
Partial Public Class ctrFormText
Private _content As ArrayList
Public Property Content() As ArrayList
If _content Is Nothing Then
Return New ArrayList
Set(ByVal value As ArrayList)
_content = value
Protected Overrides Sub CreateChildControls()
If _content IsNot Nothing Then
For Each i As Control In _content
And when I put text inside this control (like above) i get this error:
Parser Error Message: Literal content ('Please enter your login information to access CKMS:') is not allowed within a 'System.Collections.ArrayList'.
This control could have other content than just the text, so making the Content property an attribute will not solve my problem.
I found in some places that I need to implement a ControlBuilder Class, along with another class that implements IParserAccessor.
Anyway I just want my default "Content" property to have all types of controls allowed in it, both literal and actual controls.
You need to set the
ParseChildren attribute to "False", otherwise any content in your control will be parsed into the "Content" property. This does not meet your needs, as you want to have controls AND content.
In order to accomplish this, override the AddParsedSubObject method. Check for the parsed control type, and if it's a literal control, add it to your UserControl's
Content property. If it's some other control, just add it to the
Controls collection like usual.
At the end of parsing all your sub-objects, simply display the
Content property in a literal control or a panel or something.