2011-01-13 54 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>