2011-01-13 6 views
1

CMS에서 컨트롤을 사용하고 소스 코드가 없으므로이 컨트롤의 렌더링 된 출력을 변경하는 것이 좋습니다.컨트롤 렌더링을 가로 채는 가장 좋은 방법

이제 컨트롤이 페이지에서 사용 중인지 확인한 다음 변경할 필요가있는 html을 변경하는 기본 페이지 클래스의 체크를 할 수 있습니다. 그러나 이는 단지 1 회 사용에 대해 과도한 것으로 보입니다.

그래서 소스 코드없이 컨트롤의 동작을 변경하는 다른 방법이 있습니까? 나는 위에서 설명한 방법 이외의 방법을 생각하고 있지 않습니다.

감사

+0

렌더링 된 후에 html을 변경하려면 자바 스크립트를 사용할 수 있습니까? – 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> 
관련 문제