Como obter o valor definido / real da propriedade Visible no Asp.Net

A propriedade Get of the Visible de um controle recursivamente procura a árvore para indicar se o controle será processado ou não.

Eu preciso de uma maneira de ver o que o valor visível "local" de um controle é, independentemente do que seus controles pai estão definidos. Ou seja, se foi definido como verdadeiro ou falso.

Eu vi essa perguntaComo obter o valor "real" da propriedade Visible? que usa Reflection para obter o estado local, no entanto, não consegui fazer isso funcionar para WebControls. É também um método bastante sujo de obter o valor.

Eu criei o seguinte método de extensão. Ele funciona removendo o controle de seu pai, verificando a propriedade e colocando o controle de volta onde o encontrou.

    public static bool LocalVisible(this Control control)
    {
        //Get a reference to the parent
        Control parent = control.Parent;
        //Find where in the parent the control is.
        int index = parent.Controls.IndexOf(control);
        //Remove the control from the parent.
        parent.Controls.Remove(control);
        //Store the visible state of the control now it has no parent.
        bool visible = control.Visible;
        //Add the control back where it was in the parent.
        parent.Controls.AddAt(index, control);
        //Return the stored visible value.
        return visible;
    }

Esta é uma maneira aceitável de fazer isso? Ele funciona bem e eu não encontrei nenhum problema de desempenho. Parece extremamente sujo e não tenho dúvidas de que pode haver casos em que ele pode falhar (por exemplo, quando realmente renderizando).

Se alguém tiver alguma opinião sobre esta solução ou melhor ainda uma maneira mais agradável de encontrar o valor, então isso seria ótimo.

questionAnswers(3)

yourAnswerToTheQuestion