Pergunta

Eu estou fazendo uma aplicação asp.net com uma página. Nesta página, eu tenho um usercontrol definida. Este usercontrol tem um menu (três botões) e 3 usercontrols definido também. Dependendo do botão de um clicada dos três usercontrols recorrer a visível falso verdadeiro ou.

Nestes três usercontrols Eu tenho um botão e uma mensagem, e eu quero mostrar a mensagem "Não é postback" quando o botão do menu é clicado, e quando o botão do usercontrol é clicado a mensagem será " Sim, é postback !!!".

A questão é que o uso de propriedade "IsPostBack" do usercontrol ou a página a mensagem nunca será "Não é postback" por causa do botão clicado do menu para mostrar o usercontrol aninhada.

Esta é a estrutura da página:

page
  parent usercontrol
    menu
    nested usercontrol 1
      message
      button
    nested usercontrol 2
    nested usercontrol 3

Eu sei que pode ser feito usando o ViewState, mas, há uma maneira para simular IsPostBack propriedade ou saber quando é o verdadeiro postback usercontrol?

Graças.

Foi útil?

Solução

Eu tenho a solução para este problema. Quando um elemento dispara um evento é enviado para o servidor na coleção Request.Form, então eu criei uma propriedade em usercontrols aninhadas que verifica se há um controle filho (definido no próprio usercontrol) na coleção Request.Form:

public bool IsUserControlPostBack
    {
        get 
        { 
            foreach (Control c in Controls)
                foreach(string key in Page.Request.Form.AllKeys)
                    if( c.ClientID == key.Replace('$','_'))
                        return true;

            return false;
        }
    }

Este código pode ser uma propriedade do UserControl ou, se ele é chamado um monte de vezes, uma variável que é definido no evento OnInit do usercontrol.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top