2009-06-09 45 views
1

我開發了一個從WebControl繼承的服務器控件,該控件包裝任意數量的子控件並更改其輸出。控件類非常簡單,只包含RenderContents方法。試圖包裝子控件時出現分析器錯誤

下面是如何將其放置在頁面上的示例。 (不包括:控制命名空間的註冊),這樣做的目的是,從RichImageField控制渲染輸出的將被改變:

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

然而,當我嘗試瀏覽的網頁沒有任何的代碼在我的控制類似乎執行,我收到以下錯誤:

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

我很困惑爲什麼會出現此錯誤。確實沒有名爲RichImageField的公共屬性,因爲這不是屬性,而是一個子控件!

我的自定義控件正在頁面佈局的SharePoint發佈網站中使用,因此我不確定此錯誤是否來自SharePoint。但它看起來像一個基本的ASP.NET錯誤,所以我錯過了什麼?

回答

1

也許你需要添加,ParseChildren(假),PersistChildren(真)屬性自定義控制,如:

[ParseChildren(false)] 
[PersistChildren(true)] 
public class YourControl : WebControl 
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... 
    } 
} 
+0

我正在學習一些好東西,但仍然沒有運氣!我的控件中的代碼沒有執行 - 將更新問題。 – 2009-06-09 13:19:10

相關問題