2009-06-09 6 views
1

J'ai développé un contrôle serveur hérité de WebControl qui enveloppe un nombre quelconque de contrôles enfants et modifie leur sortie. La classe de contrôle est très simple et ne contient que la méthode RenderContents.Erreur d'analyseur lors de la tentative d'envelopper les contrôles enfants

Voici un exemple de la façon dont il a été placé sur la page. (Non inclus:. Enregistrement des namespaces de contrôle) L'intention est que la sortie rendu du contrôle RichImageField sera changé:

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

Cependant lorsque je tente de parcourir la page pas du code dans ma classe de contrôle semble s'exécuter et je reçois l'erreur suivante:

Parser Error Message: Type 'RX.SharePoint.Common.Controls.HideWhitespaceControl' does not have a public property named 'RichImageField'.

Je ne comprends pas pourquoi cette erreur apparaît. Il n'y a en effet aucune propriété publique nommée RichImageField car ce n'est pas une propriété mais plutôt un contrôle enfant!

Mon contrôle personnalisé est utilisé dans un site de publication SharePoint sur une mise en page. Je ne suis donc pas sûr que cette erreur provienne de SharePoint. Mais il ressemble à une erreur de base ASP.NET alors qu'est-ce qui me manque?

Répondre

1

Peut-être que vous devez ajouter le, ParseChildren (false), PersistChildren (true) attribue à votre contrôle personnalisé, comme:

[ParseChildren(false)] 
[PersistChildren(true)] 
public class YourControl : WebControl 
0

Vous devez remplacer la méthode AddParsedSubObject(object obj) pour gérer les éléments enfants:

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

J'apprends de bonnes choses mais toujours pas de chance! Le code de mon contrôle ne s'exécute pas - mettra à jour la question. –

+0

Avez-vous remplacé la méthode AddParsedSubObject sans appeler la méthode base.AddParsedSubObject? Ensuite, vous devriez vous débarrasser de l'erreur "aucune propriété publique nommée ...". Au-delà, je ne peux pas vous aider beaucoup, sauf pour vous dire que vous voudrez probablement enregistrer l'événement PreRender ou un autre événement qui est exécuté après que tous les contrôles enfants aient été rendus, afin que vous puissiez récupérer leur contenu. et supprime les espaces. – Blixt

+0

Cela n'a pas fonctionné, mais merci pour vos efforts. –

Questions connexes