Ошибка парсера при попытке обернуть дочерние элементы управления - PullRequest
1 голос
/ 09 июня 2009

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

Вот пример того, как это было размещено на странице. (Не включено: регистрация пространств имен элемента управления.) Предполагается, что визуализированный вывод элемента управления RichImageField будет изменен:

<RX:HideWhitespaceControl runat="server">
    <PublishingWebControls:RichImageField
        FieldName="PublishingPageImage"
        runat="server"
        id="PageImage">
    </PublishingWebControls:RichImageField>
</RX:HideWhitespaceControl>

Однако, когда я пытаюсь перейти на страницу, ни один из кодов в моем классе управления не кажется выполненным, и я получаю следующую ошибку:

Сообщение об ошибке парсера: Тип 'RX.SharePoint.Common.Controls.HideWhitespaceControl' не имеет публичной собственности с именем 'RichImageField'.

Я не понимаю, почему появляется эта ошибка. На самом деле нет открытого свойства с именем RichImageField, так как это не свойство, а дочерний элемент управления!

Мой пользовательский элемент управления используется на сайте публикации SharePoint в макете страницы, поэтому я не уверен, что эта ошибка исходит от SharePoint. Но это выглядит как основная ошибка ASP.NET, так что мне не хватает?

Ответы [ 2 ]

1 голос
/ 09 июня 2009

Возможно, вам нужно добавить атрибуты ParseChildren (false), PersistChildren (true) в свой пользовательский элемент управления, например:

[ParseChildren(false)]
[PersistChildren(true)]
public class YourControl : WebControl
0 голосов
/ 09 июня 2009

Вам необходимо переопределить метод AddParsedSubObject(object obj) для обработки дочерних элементов:

protected override void AddParsedSubObject(object obj)
{
    if (obj is LiteralControl)
    {
        // This is pure HTML or text...
    }
    else if (...)
    {
        // Handle ASP.NET controls...
    }
}
...