A Web Part do Consumidor não responde às alterações na Web Part do Provedor
-
10-12-2019 - |
Pergunta
Atualmente, estou usando três web parts conectadas (webpart A conectada a B, B conectada a C).O problema está na conexão entre B e C.A Webpart B é um provedor e um consumidor e contém apenas uma caixa de depósito com algumas variáveis.O item selecionado nesta caixa de depósito é o valor fornecido.Este é o provedor de conexão no código que estou usando na webpart B.
[ConnectionProvider("DropboxValue", "dbv")]
public IDropBoxValue provider()
{
return this;
}
Este é o connectionconsumer que estou usando na webpart C.
[ConnectionConsumer("DropboxValue", "dbv")]
public void consumer(IDropBoxValue providerInterface)
{
_provider = providerInterface;
}
no primeiro carregamento da página um DropBoxValue é selecionado automaticamente e a webpart C utiliza esta variável para criar um SPGridView com dados.Agora, se eu alterar essa variável selecionando um novo item na webpart da caixa de depósito, C não responderá a ela.Na verdade, se eu executar o projeto em depuração, nada será chamado da webpart C.
Então, por que a Webpart C não responde às alterações na Webpart B?
Edição Extra Sempre que eu mudo o selectedValue na Web Part B, ele muda o texto para "No Provider Web Part Connected". Este erro é criado por mim e é lançado quando
if (_Provider == null)
_Provider é a interface do provedor webpart A.
Solução
O erro no meu caso está no uso das funções CreateChildControls e OnPreRender.Liguei para o provedor em CreateChildControls enquanto ele deveria ter sido chamado na função OnPreRender.
Se você chamar uma Webpart diferente em CreateChildControls, é possível que os CreateChildControls dessa webpart não tenham sido iniciados.Quando OnPreRender é chamado, todas as funções CreateChildControl de todas as webparts foram chamadas.E assim, no momento em que OnPreRender for chamado, todas as webparts na página atual existirão.