1

Panel から派生したカスタム ASP.NET コントロールがあります。これには、デフォルトのコンストラクターと、RenderBeginTag、RenderContents、および RenderEndTag のオーバーライドがあります。

コンストラクターで、いくつかのプロパティをチェックしたいのですが、特定のケースでは、コントロールの完全なレンダリングを防止/キャンセルしたいと考えています。

これを行う最も簡単な方法は何ですか?できれば、そのコンストラクターのすぐそこにあります。現在、すべてのオーバーライド メソッドに小さなチェックを追加しましたが、これはもう少しスマートに実行できると確信しています。

4

1 に答える 1

3

また、メソッドをオーバーライドしWebControl.Renderてチェックを実行することもできます。この方法では、3 つの異なるメソッドをチェックインする必要がありません。

ただし、より良い解決策は設定することですthis.Visible = false。これにより、render メソッドが呼び出されなくなり、イベントが発生することも防止され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 に答える