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?

Foi útil?

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:

MSDN Informações

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

 <asp:ScriptManager ID="scriptManager" runat="server"/>

Isso me levou em torno do "... requer um ScriptManager na página. O ScriptManager deve aparecer antes de quaisquer controles que precisam dele."

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.

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