UPDATEPANEL + USERCONTROL + JAVASCRIPT

DS2T 20/01/2016 01:50:08
#456277
Boa noite gente!

Sim, muitos me avisaram sobre o WebForms e agora começo a sentir na pele os problemas hahaha
Estou quase terminando meu projeto (beeem grande), por isso não posso me dar ao luxo de mudar o tipo de projeto agora.

Pois bem. Se tem algo que eu estou com um enorme desprezo no WebForms é a questão do WebUserControl. Usar ele não é bem um problema depois que você entende o ciclo de vida da página.

O problema é usar ele na seguinte situação:

Carregá-lo dinamicamente, dentro de um UpdatePanel, sendo que seu UserControl tem um código JQuery/Javascript nele.

Pelo que li, todos os registros são feitos na hora de carregar a página. Como o UserControl carrega depois, normal que seu javascript não funcione (já que a atualização da página é assíncrona por causa do Update Panel). Então eu uso o método ScriptManager.RegisterStartUpScript e registro o javascript assim que o userControl é iniciado. Funciona? Funciona. Mas é feio? Demais da conta.
Ainda mais porque eu deixo o código javascript dentro de um resource tipo texto (sem tabulação, nem nada). Muuuito ruim.

Alguém teria uma solução melhor? Um amigo me deu a ideia de usar um iFrame, assim eu carregaria o userControl nele, sem UpdatePanel. Eu não sou nenhum expert Web, mas isso também me soa como gambiarra.

Agradeço a todos que puderem dar mais essa grande força!
Obrigado!
KERPLUNK 20/01/2016 03:10:07
#456280
Resposta escolhida
Em se tratando de webForms, usar iFrame seria piorar a solução. Também sou totalmente contra o uso de UserControl, justamente pelos problemas que você está tendo. E respondendo sua pergunta, não, não vai ter uma solução muito melhor pra você, nos moldes que você está usando. O que você poderia fazer pra ajudar um pouco, seria não usar updatePanel e criar WebMethods no seu codebehind, aos quais você vai chamar via AJAX. Isso ajudaria um pouco pois daria muito mais controle e você não precisaria se importar com o ciclo de vida da página, pois você vai chamar esses métodos somente quando necessários. Para isso, basta usar a decoração [Ô]WebMethod[Ô] e o método DEVE ser estático.

PS: Devo ter sido um dos que desaconselhou o uso de WebForms hehehe...
DS2T 27/01/2016 19:36:34
#456584
Oi Kerplunk! Desculpa a demora. Tenho me dedicado em aprender alguns softwares voltados a Engenharia, pra ver se meu currículo possa chamar a atenção hahaha
Valeu pela resposta. Criar a requisição por Ajax realmente vai me ajudar.

Confesso que esperava uma separação mais nítida entre o servidor e cliente. A impressão que tenho é que estou criando uma embolação dos infernos. Agora vejo que o ideal seria fazer toda a interface só com jquery, javascript, html... sem controles de servidor... e fazer a requisição Ajax. Mas isso demandaria um conhecimento melhor na parte de javascript/jquery meu.
Mas é isso, vivendo e aprendendo hahaha

Obrigado!
Deixarei o tópico aberto mais um dia para qualquer comentário.
KERPLUNK 27/01/2016 22:54:16
#456598
Pois é... é o que venho dizendo. O barato é: uma WebAPI bem caprichada para servir de fonte de dados e uma interface o mais limpa possível, de preferência HTML + CSS + Javascript. Se puder fazer uso de HTML5 melhor. Se puder utilizar alguma UI já pronta, melhor ainda. E se sua UI já possuir controles bons, daí é o cenário ideal. Porque? Simples. Você pode usar a mesma WebAPI como fonte de dados para qualquer tipo de aplicação, incluindo mobile, Windows forms e até mesmo de outras tecnologias, como Java por exemplo. A WebAPI serve realmente como fonte de dados, tanto que é até possível de ser usada em uma query para alguns bancos de dados, como Oracle, SQL Server e outros. Também é possível fazer a [Ô]troca[Ô] de tecnologia da WebAPI. Você pode construir ela em C# e mais tarde trocar para PHP por exemplo sem precisar mudar absolutamente nada nas aplicações cliente, desde que a API nova forneça tudo exatamente como a antiga o que é 100% possível.
Além de tudo isso, uma WebAPI pode ser consumida por terceiros e essa é uma vantagem que poucos conseguem enxergar a gigantesca gama de possibilidades. Uma integração DIRETA e sem dor de cabeça para clientes, fornecedores, representantes ou qualquer outro é algo que torna seu sistema um [Ô]canivete suíço[Ô].
Tópico encerrado , respostas não são mais permitidas