Pergunta

Eu vi um par de perguntas semelhantes sobre o mesmo tema, mas nenhum deles abordou o meu problema.

Eu tenho um site asp.net, e quer mostrar uma mensagem de status. (Asp: label que desaparecerá em 5 segundos) para o usuário após o banco de dados foi atualizado

Eu quero atribuir o texto para o rótulo, e depois escondê-lo com Javascript.

eu consegui o papel js resolvido, o único problema é como faço para chamar js funcionar depois que eu atribuído o texto para o controle?

Vamos dizer que eu estou atualizando algo no banco de dados com código a seguir:

<asp:Button ID="btnUploadFiles" runat="server" OnClick="buttonSubmit_Click" Text="Update"  />

código por trás

protected void buttonSubmit_Click(object sender, EventArgs e)
    { try{// update the database  
          // change label text to tell the user update succeeded}
      catch(Exception ex){...}
    }

Por favor, ajude!

UPDATE: não jquery por favor, apenas javascript simples

Foi útil?

Solução

Para responder à sua pergunta "Como faço para chamar js funcionar depois que eu atribuído o texto para o controle?". Você pode simplesmente adicionar uma chamada para dentro 'RegisterClientScriptBlock' do seu botão clique evento para a saída do JavaScript fornecido por Lucas.

protected void buttonSubmit_Click(object sender, EventArgs e)
{ 
    try
    {
       // update the database  
       // change label text to tell the user update succeeded
       label.Text = "Message";
       string js = "function hideLabel(){document.getElementById('" + label.ClientID + "').style.display = 'none'};setTimeout(hideLabel, 5000);"
       ClientScript.RegisterClientScriptBlock(this.GetType(), "test", js ,true);
    }
    catch(Exception ex){...}
}

Outras dicas

Eu usaria pessoalmente jQuery para isso, mas se você quiser usar planície antiga JavaScript, em seguida, algo como isto provavelmente irá fazer o truque:

<script type="text/javascript">
function hideLabel()
{
    // replace yourLabelID with <%=YourLabelID.ClientID%> if it's a .NET Label control
    document.getElementById('yourLabelID').style.display = 'none';
}
setTimeout('hideLabel()', 5000);
</script>

Se necessário você também pode incorporar o bloco de script em um controle Literal e apenas torná-lo visível quando você atualizar seu texto do rótulo.

Você está postando volta via Ajax ou um postback normal? Se é um postback normal, apenas registrar alguns javascript na página que define um temporizador e chama sua função que esconde o rótulo após o tempo expirar. O exemplo a seguir usa jQuery para garantir que o DOM é carregado antes de o cronômetro é iniciado, mas há outras maneiras. Ele irá esconder o rótulo após 5s tenha decorrido.

function hideLabel(label)
{
   $(label).hide();
}

$(document).ready( function() {
    var label = $('#labelID');
    setTimer(function() { hideLabel(label); ),5000);
});

A idéia é basicamente o mesmo se você estiver usando AJAX, exceto que você ajustar o timer no callback onSuccess para a chamada AJAX em vez de carga documento.

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