Notícias

24.4.08

Como desabilitar um botão após o clique usando ASP.Net (C#)

Depois de muita insistência vou fazer o meu primeiro post aqui no blog. Fiquei muito tempo pensando em que tipo de assunto abordar, mas acho que quando se trata de um blog de informática, mais especificamente pra quem desenvolve (assim como eu), temos que postar um tópico assim que encontramos alguma dificuldade e achamos a solução.
Como não tenho feito muita coisa nova ultimamente, fui buscar nas soluções de problemas básicos e antigos que encontramos em projetos anteriores. Uma dessas soluções, que é resolvida basicamente com javascript, é desabilitar um botão logo após este ser clicado, para evitar que um usuário clique várias vezes neste, causando várias requisições ao servidor e quem sabe um problema inesperado.
Nós usamos um método que fica em namespace separado, chamado Common, em que passamos o botão e o texto do botão após o clique (algo como "Aguarde"), como parâmetros.
Veja abaixo:


public static void DisableOnClick(System.Web.UI.WebControls.Button btn, string Message)
{
string theScript = "";
if ( btn.CausesValidation )
{
theScript = @"
if (typeof(Page_ClientValidate) == 'function')
{
if (Page_ClientValidate() == false )
return false;
}";
}
theScript += @"
this.value = '" + Message + @"';
this.disabled = true;
document.getElementById('" + btn.ClientID + @"')
.disabled = true;"
+

btn.Page.ClientScript.GetPostBackEventReference(
btn, string.Empty) + @";";


btn.Attributes["onclick"] = theScript;
}



Basicamente o que o método faz é criar um script e anexar ao evento de clique do botão. Este script verifica se o botão faz algum tipo de validação e, caso afirmativo, executa essa função, depois o botão é desabilitado, o novo texto é setado e é feita a chamada de postback que está anexada ao botão.

Exemplo de uso:

private void Page_Load(object sender, System.EventArgs e)
{
Common.DisableOnClick(btnRegister,
"Aguarde...");
}


Simples, prático e útil... Enjoy ;)

23.4.08

Pop-ups

O bom e velho pop-up.

Sabemos que popups automáticos são bloqueados pela maioria dos navegadores atuais, mas se for aciona por um clique não há problemas.

Um exemplo simples de um pop-up javascript num link:

<a href="http://www.blogger.com/post-edit.g?blogID=8414451965867271178&postID=3452881723842281264#" onclick="javascript:window.open('index.htm', null, 'height=200,width=400,status=yes, toolbar=no,menubar=no,location=no')">
Clique aqui para abrir um popup
</a>

Obs.: Há quem recomende não usar o href="#", mas até hoje não encontrei uma justificativa plausível ou solução ideal.

Ainda se o seu site é em flash, você pode abrir um pop-up com o navegador (caso tenha optado por não usar uma camada flutuante do flash) colocando o javascript em qualquer botão do flash:
on (release) {
getURL ("javascript:NewWindow=window.open('index.php','newWin','width=400,height=300,left=0,top=0,
toolbar=No,location=No,scrollbars=No,status=No,resizable=No,fullscreen=No'
); NewWindow.focus();
void(0);");
}

Você pode encontrar mais em:
http://www.flash-db.com/PopUp/JavaScriptPopUp.php?page=2 (em inglês)

Qualquer dúvida deixe um comentário.

2.4.08

Adeus theSpoke!

Depois de ficar cansado com os erros no site theSpoke.net resolvi mudar de vez de lá. Quando eu tiver um tempo vou dar uma revisada nas matérias que postei lá e publicar aqui.

Já estou testando o Windows Live Writer, perdi uma hora tentando configurar para postar no theSpoke sem sucesso. E acessando diretamente no site só dá erro também.

Espero que a Microsoft ao menos tenha tirado a ligação do ImagineCup ao theSpoke.net que está um caos. Pelo que pesquisei muitas pessoas sairam do theSpoke.net pelo mesmo motivo, acredito que ele irá ficar lá agora apenas para histórico.

Bom, logo começarei a postar conteúdo, começando por uma dor de cabeça que tive e perdi dias procurando por uma solução que o Asp.Net fornece incompleto (ao menos até o 2.0) e não encontro nada parecido na internet, apenas pessoas procurando por soluções de problemas semelhantes.

Abraços

Share