LuizTools 2.0

Desde 2010 codificando minhas ideias!

ASP.NET Button não dispara postback

Outros nomes possíveis para este post seriam "ASP.NET Button não funciona" ou "Que m**** que está ac

Outros nomes possíveis para este post seriam "ASP.NET Button não funciona" ou "Que m**** que está acontecendo com meu formulário?". De qualquer forma, este post será bem rápido. O objetivo é listar algumas causas comuns que fazem com que botões parem de funcionar com ASP.NET Webforms. Não há nenhuma mágica ou bug conhecido, apenas falta de atenção ou prática com a construção de formulário com este padrão de desenvolvimento web da plataforma .NET. Acredito que este post será vivo, ou seja, irei colocando mais conteúdo conforme for descobrindo mais causas para este problema.

O Problema

O problema é simples e objetivo: você tem um formulário ASP.NET com um botão. Você clica no botão e o que deveria acontecer não acontece. Claro, tem algumas variações, que podemos chamar de sintomas. Para cada sintoma, há um remédio diferente.

A tela apresenta um erro

Se a tela apresenta um erro em ASP.NET, considere-se com sorte pois geralmente os erros são muito bons em dizer onde está o problema. Alguns erros comuns incluem você estar com sua tag ASP.NET mal formada, como falta de runat="server" ou similar. Dê uma revisada nas linhas do seu .aspx ou .aspx.cs conforme mencionado no erro e acredito que não terá problemas.

Um erro comum de funcionamento de botão é quando utilizamos eles dentro de algum controle de repetição, como Repeater. Em geral os programadores esquecem que colocando o comportamento de carregar o repeater dentro do Page_Load, o mesmo será chamado toda vez acontecer algum postback, inclusive quando um botão é clicado. Por isso, é uma boa prática colocar uma verificação no Page_Load para somente carregar se não for um postback. Mas o que isso tem a ver com problemas de botão? Quando a página carrega a primeira vez e o botão é renderizado, ele possui um identificador único no ViewState, que, caso seja recarregada a tela, será alterado. Com isso, o botão que originalmente chamou o postback não existe mais e a chamada fica como se fosse anônima ou "injetada", o que é uma violação de segurança do ASP.NET que causará um erro.

A tela não apresenta erro

Aqui que mora o problema, quando estamos às cegas com um botão não funcionando. Uma dica é, usando o Google Chrome, abrir as ferramentas (F12) e ver no Console se não tem algum erro de Javascript. Isso é bem comum quando usamos UpdatePanel, que por padrão suprime os erros da página. Em geral os erros de Ajax não são muito esclarecedores, mas basta executar tudo novamente com F5, para depurar, que se acontecer o erro novamente o depurador do Visual Studio vai te levar até a linha do erro.

Às vezes o ASP.NET não apresenta erro pois de fato não existe erro. Ou seja, é algum problema de lógica ou algo Javascript seu que está bloqueando a execução do botão. Veja se seu botão não possui um OnClientClick definido, pois se caso possuir, tenha certeza de que o método Javascript associado retorna true para garantir a continuidade da execução do botão. Ainda no assunto Javascript, revise se na sua página não existe alguma tag script mal formada, lembrando que a tag script sempre deve ser fechada com o padrão "></script>" e jamais com a versão enxuta "/>", caso contrário lhe trará problemas. Sim isso é muito idiota, mas acontece, então se liga!

Um último adendo cabe aos ASP.NET Validators. Por padrão os Validators, como o RequiredFieldValidator, fazem a validação via Javascript antes de qualquer postback, e caso tenha qualquer problema em sua página impedirá que o postback aconteça. Se você usa validadores em qualquer ponto de seu formulário, pode ser uma boa verificar se não são eles que estão impedindo seu botão de funcionar. Esse ponto se torna ainda mais importante caso você esteja usando WebUserControls na sua página, pois às vezes eles estão escondidos, como em modais, mas mesmo assim com seus Validators ativos, impedindo o postback da página. Uma ideia pode ser dizer que seu botão não causa validação, definindo a propriedade CausesValidation para false. Isso claro, se o click do seu botão não for interferir com os demais dados do seu formulário.

Espero ter ajudado.

Tem mais algum caso em que seu botão não funciona e que deseja compartilhar? Outro detalhe que deixei passar? Escreva nos comentários!

4 anos de LuizTools

N&#227;o, hoje n&#227;o &#233; o anivers&#225;rio oficial do blog, que foi lan&#231;ado em 19 de dezembro de 2010. Mas j&#225; faz

Não, hoje não é o aniversário oficial do blog, que foi lançado em 19 de dezembro de 2010. Mas já faz quase 4 anos desde que criei este que foi na época meu terceiro, e atualmente mais duradouro, blog. Na verdade o LuizTools vinha enfrentando problemas técnicos por motivos desconhecidos já há alguns meses, com bugs na home do blog, impossibilidade de comentar e por aí vai. Eu estava usando uma versão tão velha do CMS .NET Blog Engine que nem mesmo reinstalando ele conseguia resolver os problemas. Sem novas desculpas para adiar uma repaginação do blog, eis que lanço a versão 2.0 do LuizTools!

Esta versão ainda usa o CMS .NET Blog Engine, minha plataforma de blog favorita, mas desta vez a recém lançada versão 3.0 (o blog anterior usava a versão 1.6) da plataforma, que é toda desenvolvida usando padrões mais modernos como ASP.NET MVC e com o apoio de Bootstrap e JQuery, coisas que eu mal conhecia em 2010. Não é à toa que resolvi dar uma recauchutada no blog, já tem alguns dias que voltei a escrever nele e não somente isso, mas que voltei a fazer algumas coisas de que gosto tanto quanto ler bons livros, desenvolver games para celular, dar cursos de extensão e por aí vai.

Esse ano tem sido um ano bem mais tumultuado que os demais. E não pela quantidade de trabalho, que sempre foi alta, mas pela quantidade diferente de desafios e emoções a que estou sendo submetido e isto ou te enlouquece ou te põe a cabeça no lugar, que foi o que aconteceu comigo. A pressão faz com que você se obrigue a repriorizar as coisas que estão diante de você e decidir o que quer e o que não quer fazer com sua vida. A pressão de, por exemplo, ter chegado aos 26 anos e estar mais perto dos 30 do que dos 20, faz você pensar se quer que os próximos anos sejam iguais aos anteriores e não, a resposta é definitivamente não.

Hoje, quase 4 anos depois de lançar este blog no ar e relendo alguns antigos posts me mostram o quanto mudei. Nesse ínterim terminei a graduação, comecei e abandonei o mestrado, terminei uma especialização, sai do meu emprego na RedeHost por onde fiquei 5 anos e que cujas aventuras renderam tantos posts aqui no blog. Ajudei a lançar um livro no Brasil sobre programação móvel, área da minha pós. Abri duas empresas, sendo uma de consultoria e uma startup de Internet. Terminei meu curso de Inglês. Participei de muitos cursos e eventos de startups, inclusive indo para o exterior. Virei finalmente professor universitário, que era um antigo sonho e até o final do ano nasce o meu filho querido, que já está no sexto mês de gestação na barriga da minha amada esposa. Isso só para citar alguns highlights.

Sei que ser blogueiro é ser um espécime em extinção, principalmente se seu blog não tem fotos bizarras, vídeos amadores ou faz piadas com gente famosa. Não sei exatamente o que leva a escrever o material que coloco aqui no blog. Um misto de terapia com solidariedade? Egocentrismo? Marketing pessoal? Nunca defini ao certo o meu posicionamento com esta página e acho que isso vai continuar assim, pois no fundo, isso é o que me define. Ou seria melhor dizer, o que não me define? Afinal, quando me perguntam o que eu faço da vida, nunca sei por onde começar.

Mas sem me extender demais, tenho muito o que (voltar a) escrever por aqui. Tenho lido muito ultimamente e sou o tipo de cara que adora influenciar as outras pessoas a lerem. Tenho dado alguns cursos, e muitas aulas como professor regular, o que tem melhorado bastante a minha capacidade de criar bons tutoriais técnicos. Mas principalmente, estou para lançar uma edição nova do livro sobre Corona SDK que traduzi e estou trabalhando em um novo projeto de game mobile usando esta incrível plataforma, que quero compartilhar com vocês. Afinal, qual é a graça se você for o único que joga os jogos que desenvolve?

Até breve. E vida longa e prospéra ao blog LuizTools!

Os Heróis da Revolução - Resenha

Resenha do livro Her&#243;is da Revolu&#231;&#227;o, de Steven Levy.

Heróis da Revolução

O título original em Inglês soa melhor, mas Hackers: The Heroes of the Revolution é um ótimo livro de qualquer jeito. Ok, confesso que fui seduzido pela capa, com as silhuetas de Jobs, Wozniak, Gates e Zuckerberg e a chamada de como eles mudaram nossas vidas. Confesso também que me decepcionei ao saber que esta foi apenas uma jogada de marketing e que Zuckerberg nem mesmo é citado no livro. De qualquer forma, foi uma ótima leitura e hoje trago um breve resumo para quem possa se interessar pelo livro.

A Primeira Geração de Hackers

O livro foi escrito por Steven Levy em 1983. Sim, isso mesmo, é um livro muito velho. Mas a história que ele conta é mais velha ainda, dos primeiros hackers originados no MIT, na década de 60. Oriundos de um clube eletrônico de ferreomodelismo (aqueles autoramas com trenzinhos, sabe?) os jovens e brilhantes garotos que mais tarde seriam cohecidos pelas suas façanhas computacionais ocupavam seus dias soldando componentes e montando placas de circuitos até que o investimento militar trouxe os primeiros grandes mainframes de pesquisa e eles foram cativados pelo poder da computação. O livro cita nomes e conta as histórias de hackers famosos como Bill Gosper, David Silver, Stew Nelson, entre outros e confesso que essa primeira parte é um pouco curiosa e monótona, mas é importante pois é nela que se forma o conceito da ética Hacker e desmistifica a crendice popular de que hackers são bandidos digitais, quando na verdade um hacker é um perito tecnológico que ama a tecnologia e acredita que ela deve ser sempre desenvolvida e compartilhada das melhores maneiras possíveis.

A Segunda Geração de Hackers

Avançando no tempo e chegando na década de 70, durante o início da revolução do computador pessoal, conhecemos os hackers de hardware, considerados da segunda geração. Gênios como Steve Wozniak, Ed Roberts e o famoso Capitão Crunch são enaltecidos através de seus importantíssimos papéis para o desenvolvimento dos primeiros PCs, seja em suas fábricas como a Mits, seja em suas garagens e no Homebrew Club. É neste capítulo que a narrativa se torna mais empolgante com a corrida computacional para ver quem emplacava o melhor modelo, quem democratizaria mais o acesso à tecnologia. Alguns nomes são citados de relance, como o de Bill Gates, que desenvolveu uma das primeiras linguagens de programação para estes novos computadores e fez fortuna com os royalties dos produtos da Microsoft, sua recém fundada empresa. Conta também o vertiginoso crescimento da Apple, bem como de outras empresas que rapidamente foram engolidas.

A Terceira Geração de Hackers

Inusitadamente a terceira geração, na década de 80, são a dos hackers de jogos, que criaram toda uma indústria biolionária sobre outra indústria bilionária com games para computadores pessoais. Antes dos hackers de jogos, os computadores possuíam programas para criar programas. Basicamente eram máquinas para trabalho e com o advento dos primeiros jogos para computador, repetindo títulos das máquinas de fliperama, criou-se um universo de aficcionado por computadores que usavam a máquina não apenas para trabalho, mas agora para lazer também. Nomes como Ken Willians, da Sierra, John Harris, criador do Frog, entre diversos outros ícones desta indústria são profundamente examinados bem como os jogos que marcaram a época desde sua concepção até alguns pormenores técnicos. Simplesmente a melhor parte do livro, na minha opinião.

O Último dos Hackers

Finalmente o livro termina traçando a trajetória do Richard Stallman, criador do GNU, da Fundação do Software Livre e do Emacs, que é considerado o último hacker original do MIT, que ainda hoje briga para que o legado dos hackers seja mantido, respeitado e levado adiante. Extremamente radical e intolerante, Stallman vê no software proprietário uma praga a ser eliminada da face da Terra. O livro fala também do que mudou na vida dos hackers, através de duas atualizações, uma de 1993 e outra dos anos 2000, e é bem curioso.

Como mencionei anteriormente, o livro é bem monótono no início e demorei alguns meses para concluir o primeiro capítulo. Entretanto os seguintes são bem mais contemporâneos e dinâmicos, e em especial a terceira geração de hackers me deixou muito inspirado em voltar a fazer alguns jogos como hobby, obviamente usando Corona SDK, meu framework mobile favorito.

Até a próxima!