开发者

ASP.NET Custom Control - Template Allowing Literal Content

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
    Inherits UserControl

    Private _content As ArrayList

    <PersistenceMode(PersistenceMode.InnerDefaultProperty), _
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
    TemplateInstance(TemplateInstance.Single)> _
    Public Property Content() As ArrayList
        Get
            If _conten开发者_如何学Got 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

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜