1

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エラーのように見えるので、何が欠けていますか?

4

2 に答える 2

1

次のように、ParseChildren(false)、PersistChildren(true)属性をカスタムコントロールに追加する必要があるかもしれません。

[ParseChildren(false)]
[PersistChildren(true)]
public class YourControl : WebControl
于 2009-06-09T15:11:22.820 に答える
0

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...
    }
}
于 2009-06-09T12:48:51.187 に答える