AJAX ScriptManager em UserControl
-
19-08-2019 - |
Pergunta
Eu tenho um UserControl que contém um UpdatePanel que envolve alguns outros controles. O UserControl será usada em algumas páginas que já tem um ScriptManager e outras páginas que não têm um ScriptManager. Eu gostaria que o UserControl para trazer automaticamente a sua própria ScriptManager se um não existe.
Eu tentei ScriptManager.GetCurrent e se ele retorna null i criar meu próprio ScriptManager e inseri-lo no formulário, mas não consigo encontrar um lugar suficientemente cedo no ciclo de vida do UserControl para executar este código. Recebo o erro "O controle com ID 'uPnlContentList' requer um ScriptManager na página. O ScriptManager deve aparecer antes de quaisquer controles que precisam dele." Toda vez que tento carregar a página. Os lugares que eu tentei executar o meu código são onInit, CreateChildControls e PageLoad e eles nunca obter chamado porque ele morre antes de chegar a eles.
Onde devo colocar essa verificação?
Solução
Eu odeio a vir a esta em outra direção, mas você está usando uma página mestra? E se assim for, você já pensou em colocar um único ScriptManager nele e ser feito com ele?
Outras dicas
colocar um ScriptManager na sua MasterPage que todos os seus ASPX arquivos de referência. Em seguida, em qualquer outro lugar no site que você precisa para trabalhar com o ScriptManager usar um ScriptManagerProxy que obterá a ScriptManager na página principal e deixá-lo trabalhar com ele no controle do usuário e no trás código.
Agora chamando ScriptManager.GetCurrent (Página) vai lhe dar uma referência a um gerenciador de script.
<asp:ScriptManagerProxy>
<Scripts>
<asp:ScriptReference Path="~/Scripts/myscript.js" />
<Scripts>
</asp:ScriptManagerProxy>
Aqui está um link:
Eu acho que o evento Init deve funcionar. Use a técnica que você descreveu (ou seja, a verificação de que ScriptManager.GetCurrent retorna nulo antes de adicionar), mas quando você adiciona o ScriptManager, certifique-se de adicioná-lo como o primeiro controle no interior do formulário.
Eu não testei isso, mas eu acho que vai funcionar.
O que funcionou para mim foi incluindo esta linha após
Eu fiz 2 coisas que obras.
No UserControl torna este Sub:
Public Sub SetFocus()
txtBox.Focus()
End Sub
No site caling, chamar este antes de seu ScriptManagerCall
userControl.SetFocus()
Se você tem AutoPostback em você Usercontrol você também tem que definir o foco no evento TextChanged.
Protected Sub txtBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged
txtBox.Focus()
......
End Sub
espero que isso funcione.