截取控件渲染的最佳方法

时间:2011-01-13 11:59:24

标签: asp.net content-management-system

我在CMS中使用了一个控件,我们没有它的源代码,我想要做的是更改此控件的渲染输出。

现在,我可以检查我的基类Page,检查控件是否正在页面上使用,然后更改需要更改的html,但这对于1次使用似乎有点过分。

那么有没有其他方法可以在没有源代码的情况下更改控件的行为?我想的不是上述方式。

由于

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>