1

我有一个派生自 Panel 的自定义 ASP.NET 控件。它有一个默认构造函数和 RenderBeginTag、RenderContents 和 RenderEndTag 覆盖。

现在在构造函数中我想检查一些属性,在某种情况下我想阻止/取消控件的完整呈现。

最简单的方法是什么?最好就在那个构造函数中。现在我已经为所有覆盖方法添加了一个小检查,但我相信这可以做得更聪明。

4

1 回答 1

3

您也可以覆盖WebControl.Render执行检查的方法 - 这样您就不必检查 3 种不同的方法。

但更好的解决方案是设置this.Visible = false- 这可以防止调用渲染方法并防止PreRender引发事件(它们在设计上应该只在可见控件上引发)。

我会覆盖该Visible属性并在那里添加检查:

public override bool Visible
{
    get
    {
        var b = base.Visible;
        if (!b || this.ControlShouldNotBeRendered())
            return false;
        return true;
    }

    set
    {
        base.Visible = value;
    }
}
于 2012-11-13T13:59:17.717 回答