2011-01-13 8 views
1

私はCMSでコントロールを使用していますが、ソースコードはありません。このコントロールのレンダリングされた出力を変更するだけです。コントロールレンダリングを傍受する最良の方法

コントロールがページ上で使用されているかどうかをチェックし、変更する必要があるhtmlを変更するチェックをベースページクラスで行うことができましたが、ちょうど1回の使用では多すぎます。

ソースコードなしでコントロールの動作を変更する方法はありますか?私は上記の方法以外には考えていない。

おかげ

+0

レンダリング後にhtmlを変更するにはjavascriptを使用できますか? – Clicktricity

+0

これは私の最初の考えでしたが、正直言って、それはレイアウトにわずかに影響するので良く見えません。 – Mantorok

答えて

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> 
関連する問題