我在CMS中使用了一个控件,我们没有它的源代码,我想要做的是更改此控件的渲染输出。
现在,我可以检查我的基类Page,检查控件是否正在页面上使用,然后更改需要更改的html,但这对于1次使用似乎有点过分。
那么有没有其他方法可以在没有源代码的情况下更改控件的行为?我想的不是上述方式。
由于
答案 0 :(得分: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>