diálogo de confirmação Javascript - ASP.NET
-
22-08-2019 - |
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
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.