Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 尝试包装子控件时出现分析器错误_Asp.net_Sharepoint_Moss_Web Controls - Fatal编程技术网

Asp.net 尝试包装子控件时出现分析器错误

Asp.net 尝试包装子控件时出现分析器错误,asp.net,sharepoint,moss,web-controls,Asp.net,Sharepoint,Moss,Web Controls,我开发了一个继承自WebControl的服务器控件,它可以封装任意数量的子控件并更改其输出。控件类非常简单,只包含RenderContents方法 下面是如何将其放置在页面上的示例。(不包括:控件名称空间的注册。)此处的目的是更改RichImageField控件的渲染输出: <RX:HideWhitespaceControl runat="server"> <PublishingWebControls:RichImageField FieldName="

我开发了一个继承自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错误,那么我缺少什么呢?

您需要重写
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...
    }
}

您需要重写
AddParsedSubObject(objectobj)
方法来处理子元素:

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

可能需要将、ParseChildren(false)、PersistChildren(true)属性添加到自定义控件中,如:

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

可能需要将、ParseChildren(false)、PersistChildren(true)属性添加到自定义控件中,如:

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

我正在学习一些好东西,但仍然没有运气!控件中的代码未执行-将更新问题。是否在未调用base.AddParsedSubObject方法的情况下重写AddParsedSubObject方法?然后你应该摆脱“没有公共财产命名…”错误。除此之外,我帮不了你什么忙,除了说你可能想注册PreRender事件或在所有子控件渲染后执行的其他事件,这样你就可以得到它们的渲染内容并删除空白。奇怪,因为我制作了自己的控件,它工作得很好,让我可以修改控件中的控件。尝试从控件继承并重写该方法,也许这样会更好?我正在学习一些好东西,但仍然没有运气!控件中的代码未执行-将更新问题。是否在未调用base.AddParsedSubObject方法的情况下重写AddParsedSubObject方法?然后你应该摆脱“没有公共财产命名…”错误。除此之外,我帮不了你什么忙,除了说你可能想注册PreRender事件或在所有子控件渲染后执行的其他事件,这样你就可以得到它们的渲染内容并删除空白。奇怪,因为我制作了自己的控件,它工作得很好,让我可以修改控件中的控件。尝试从控件继承并重写该方法,也许这样会更好?