Como simular postback em usercontrols aninhadas?
-
03-07-2019 - |
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.
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.