W którym momencie cyklu kontrolnego Control.Visible przestaje renderować?

Próbuję napisać proste narzędzie webcontrol, aby wyświetlać jednowierszowe wiadomości wewnątrz strony internetowej - aktualizacje statusu, komunikaty o błędach itp. Wiadomości będą pochodzić z innych elementów sterujących na stronie, wywołując metodę w webcontrol. Jeśli kontrolka nie ma żadnych komunikatów w czasie, gdy robi to przed renderowaniem, nie chcę, aby renderowała na stronie w ogóle - chcę, aby ustawiła Control.Visible = false. Wydaje się jednak, że działa to tylko w przypadku renderowania bez postbacku. Oto kod, którego używam:

public class MessageList : WebControl
{

#region inner classes

    private struct MessageItem
    {
        string Content, CssClass;

        public MessageItem(string content, string cssClass)
        {
            Content = content;
            CssClass = cssClass;
        }

        public override string ToString()
        { return "<li" + (String.IsNullOrEmpty(CssClass) ? String.Empty : " class='" + CssClass + "'") + ">" + Content + "</li>"; }
    }

    private class MessageQueue : Queue<MessageItem> { }

#endregion

#region fields, constructors, and events

    MessageQueue queue;

    public MessageList() : base(HtmlTextWriterTag.Ul)
    {
        queue = new MessageQueue();
    }

    protected override void OnLoad(EventArgs e)
    {
        this.Controls.Clear();
        base.OnLoad(e);
    }

    protected override void OnPreRender(EventArgs e)
    {
        this.Visible = (queue.Count > 0);

        if (this.Visible)
        {
            while (queue.Count > 0)
            {
                MessageItem message = queue.Dequeue();
                this.Controls.Add(new LiteralControl(message.ToString()));
            }
        }

        base.OnPreRender(e);
    }

#endregion

#region properties and methods

    public void AddMessage(string content, string cssClass)
    { queue.Enqueue(new MessageItem(content, cssClass)); }

    public void AddMessage(string content)
    { AddMessage(content, String.Empty); }

#endregion

}

Próbowałem również umieścić sprawdzanie wewnątrz CreateChildControls z tym samym wynikiem.

questionAnswers(4)

yourAnswerToTheQuestion