Eu tenho um aplicativo Web ASP.NET (.NET 4.8) antigo. Uma página específica requer muitas consultas ao banco de dados para obter o conjunto de resultados durante o carregamento inicial (ou seja, dentro de! Page.IsPostBack) e normalmente leva cerca de 5 minutos.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//divLoading.Visible = true; // This approach doesn't work.
// Queries take about 5 min.
//divLoading.Visible = false;
}
}
Eu tenho funções javascript Carregando.Show() e Carregando.Hide() personalizadas e tentei mostrá-las no momento do carregamento em ASPX como abaixo, mas ele não exibe o ícone de carregamento.
<div id="divLoading" runat="server" Style="width: 300px; height: 320px; visibility:hidden">
<asp:Label ID="lblLoading" runat="server" Text="Please wait..." />
</div>
...
<script type="text/javascript">
function OnLoad() {
Loading.Show();
}
window.onload = OnLoad;
...
</script>
Como posso fazer isso funcionar? Alguma alternativa ou conselho, POR FAVOR?
A solução simples é permitir que a página seja totalmente renderizada no lado do cliente e ENTÃO fazer com que o código do lado do cliente clique em um botão.
Portanto, mova seu stub de código !IsPostBack do evento de carregamento da página para trás de um stub de evento de botão padrão. Então é simples deixar a página da web ser renderizada, fazer com que o evento "on load" da página do lado do cliente exiba o botão giratório ou "aguarde a área" e então o mesmo código do cliente pode clicar em nosso botão usando JavaScript do lado do cliente.
Obviamente, queremos que esse código seja executado apenas no carregamento da primeira página, por isso introduzimos uma variável myIsPostBack do lado do cliente.
Então, por exemplo, faremos um processo de carregamento longo "falso".
Então, esta marcação:
Então, observe como o botão (e div) possuem display = none.
E criamos uma função IsPostBack do lado do cliente.
Então, o efeito quando a página carrega é este:
No entanto, esse código só será executado no carregamento real da primeira página, assim como o sinalizador !IsPostBack é usado no código por trás, acima, você pode usar a função IsPostBack do lado do cliente para a mesma finalidade. Esse código só será executado no carregamento da primeira página.
Agora é uma questão simples mover o stub de código de carregamento da página! IsPostBack para o botão oculto acima e usar o código do lado do cliente para "clicar" nesse botão, e fazer isso apenas no primeiro carregamento real da página (IsPostBack = false).