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