2011-01-13 52 views
1

我有一個控件用於我們的CMS,我們沒有它的源代碼,我想要做的是更改此控件的渲染輸出。攔截控件渲染的最佳方法

現在,我可以在我的基本Page類中檢查是否在頁面上使用了該控件,然後更改需要修改的html,但這對於1次使用來說似乎有點過分。

那麼有沒有其他方式來改變沒有源代碼的控件的行爲?除了上面描述的方式之外,我想的不是這些。

感謝

+0

你可以使用JavaScript來改變它已被呈現後的HTML嗎? – Clicktricity 2011-01-13 12:05:59

回答

4

在自定義的控制把它包:

public class MyCMSControl: CommercialCMSControl 
{ 
    protected override void Render(HtmlTextWriter writer) 
    { 
     StringBuilder stringBuilder = new StringBuilder(); 
     StringWriter stringWriter = new StringWriter(stringBuilder); 

     using (HtmlTextWriter myWriter = new HtmlTextWriter(stringWriter)) 
     { 
      base.Render(myWriter); 

      string newOutput; 
      // the original output is in stringBuilder, do whatever you want, and 
      // put it in newOutput 


      writer.Write(newOutput); 
     } 
    } 
} 

如果您希望能夠操縱特定頁面代碼的輸出,添加事件,是這樣的:

public delegate void OnRenderHandler(object sender, string originalOutput, HtmlTextWriter writer) 
public OnRenderHandler OnRender; 
... 
/// before writer.Write above... 
if (OnRender!=null) { 
    OnRender(this,stringBuilder.ToString(),writer); 
} 

從而使您的自定義版本的設計師,你需要在web.config中的東西

<pages> 
    <controls> 
    <add namespace="My.Control.Namespace" assembly="My.Control.Assembly" tagPrefix="MyControlsPrefix"/> 
    </controls> 
</pages>