1
我有一個控件用於我們的CMS,我們沒有它的源代碼,我想要做的是更改此控件的渲染輸出。攔截控件渲染的最佳方法
現在,我可以在我的基本Page類中檢查是否在頁面上使用了該控件,然後更改需要修改的html,但這對於1次使用來說似乎有點過分。
那麼有沒有其他方式來改變沒有源代碼的控件的行爲?除了上面描述的方式之外,我想的不是這些。
感謝
我有一個控件用於我們的CMS,我們沒有它的源代碼,我想要做的是更改此控件的渲染輸出。攔截控件渲染的最佳方法
現在,我可以在我的基本Page類中檢查是否在頁面上使用了該控件,然後更改需要修改的html,但這對於1次使用來說似乎有點過分。
那麼有沒有其他方式來改變沒有源代碼的控件的行爲?除了上面描述的方式之外,我想的不是這些。
感謝
在自定義的控制把它包:
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>
你可以使用JavaScript來改變它已被呈現後的HTML嗎? – Clicktricity 2011-01-13 12:05:59