Asp.net 尝试包装子控件时出现分析器错误
我开发了一个继承自WebControl的服务器控件,它可以封装任意数量的子控件并更改其输出。控件类非常简单,只包含RenderContents方法 下面是如何将其放置在页面上的示例。(不包括:控件名称空间的注册。)此处的目的是更改RichImageField控件的渲染输出:Asp.net 尝试包装子控件时出现分析器错误,asp.net,sharepoint,moss,web-controls,Asp.net,Sharepoint,Moss,Web Controls,我开发了一个继承自WebControl的服务器控件,它可以封装任意数量的子控件并更改其输出。控件类非常简单,只包含RenderContents方法 下面是如何将其放置在页面上的示例。(不包括:控件名称空间的注册。)此处的目的是更改RichImageField控件的渲染输出: <RX:HideWhitespaceControl runat="server"> <PublishingWebControls:RichImageField FieldName="
<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事件或在所有子控件渲染后执行的其他事件,这样你就可以得到它们的渲染内容并删除空白。奇怪,因为我制作了自己的控件,它工作得很好,让我可以修改控件中的控件。尝试从控件继承并重写该方法,也许这样会更好?