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 回答