2010-06-16 2 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», иначе любой контент в вашем элементе управления будет проанализирован в свойстве «Содержимое». Это не соответствует вашим потребностям, так как вы хотите иметь элементы управления и контент.

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

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

Смежные вопросы