Пользовательский элемент управления ASP.NET - шаблон, разрешающий буквальное содержимое - PullRequest
1 голос
/ 16 июня 2010

Я хочу, чтобы мой пользовательский элемент управления мог иметь буквальное содержимое внутри него. Например:

<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.

В любом случае, я просто хочу, чтобы в свойстве «Содержимое» по умолчанию были разрешены все типы элементов управления, как литеральные, так и фактические.

1 Ответ

0 голосов
/ 16 июня 2010

Вам необходимо установить для атрибута ParseChildren значение «Ложь», в противном случае любое содержимое, находящееся под вашим контролем, будет проанализировано в свойстве «Содержимое». Это не соответствует вашим потребностям, так как вы хотите иметь элементы управления и контент.

Для этого переопределите метод AddParsedSubObject . Проверьте анализируемый тип элемента управления и, если это буквальный элемент управления, добавьте его в свойство Content вашего UserControl. Если это какой-то другой элемент управления, просто добавьте его в коллекцию Controls, как обычно.

В конце анализа всех ваших подобъектов просто отобразите свойство Content в буквальном элементе управления, панели или чем-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...