Mostrando postagens com marcador camadas. Mostrar todas as postagens
Mostrando postagens com marcador camadas. Mostrar todas as postagens

terça-feira, 17 de setembro de 2013

Implementando Callbacks

O que é Callback?
É uma das formas de enviar uma informação ao servidor sem atualizar ou submeter a página atual.

Esse exemplo que eu vou dar a seguir é o básico do básico, como um campo de busca com sugestões, que  ao digitar uma informação o sistema automaticamente irá buscar no servidor atualizando um painel com os possíveis resultados.

o arquivo ASPX ficará assim:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="callback._default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>teste autocomplete</title>
  <script type="text/ecmascript">
      function Buscar() {
          var lb = document.getElementById("busca").value;

          CallServer(lb, "");         
      }
      function Retorno(rValue)
      {         
          document.getElementById("resultado").innerHTML = rValue;         
      }
  
  </script>
</head>
<body>
  <form id="form1" runat="server">
    <div>
  

     
      <input type="text"  ID="busca" onkeyup="Buscar()" />
      <br />
      <span id="resultado" runat="server"></span>
    </div>
  </form>
</body>
</html>




No código acima, adicionei dois controles, um textbox(busca) e um span(resultado).

No controle textbox eu coloquei o evento onkeyup para acionar a função Buscar() que é um Script. Essa função Buscar irá capturar o texto digitado no textbox e chamar o método CallServer passando essa informação.

abaixo o código C#:


using System;
using System.Configuration;
using System.Web;
using System.Linq;
using System.Collections.Generic;

namespace callback
{
    public partial class _default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
    {

        protected String returnValue;
        protected void Page_Load(object sender, EventArgs e)
        { 
            Page.ClientScript.RegisterClientScriptBlock(this.GetType()
                , "CallServer",
                "function CallServer(arg, context) { " + Page.ClientScript.GetCallbackEventReference(this, "arg", "Retorno", "context") + ";}"
                , true);

        }
        public void RaiseCallbackEvent(String eventArgument)
        {
            if (eventArgument != "")
            {
                List<string> usuarios = new List<string>();

                usuarios.Add("Bruce Lee");
                usuarios.Add("Carmem Miranda");
                usuarios.Add("Castro Alves");
                usuarios.Add("Cecília Meireles");
                usuarios.Add("Clarice Lispector");
                usuarios.Add("Elvis Presley");
                usuarios.Add("Greta Garbo");
                usuarios.Add("Jorge Amado");
                usuarios.Add("Machado de Assis");
                usuarios.Add("Monteiro Lobato");
                usuarios.Add("Neil Armstrong");
                usuarios.Add("Thomas Edson");
                usuarios.Add("Tom Jobim");

                var resultados = from r in usuarios where r.Contains(eventArgument) select r;
               
                foreach (var item in resultados)
                {
                    returnValue += item+ "<br>";
                }
              
                if (returnValue == "" || returnValue == null)
                    returnValue = "Não localizamos o usuário informado";
               
            }

        }
        public String GetCallbackResult()
        {
            return returnValue;
        }
    }

}



Eu criei um List de string com o nome de usuários e adicionei alguns nomes.

Quando pressionamos uma tecla no banco "Busca" o evento Buscar() é invocado chamando acionando a função RaiseCallbackEvent  essa função irá buscar no List usuarios e retornar o valor para o navegador.



Ao executar temos o seguinte resultado:
Digitando um carácter:



o retorno é de todos os usuários que possua a letra C e seu nome. 


o legal de utilizar o Callback é não ter que recarregar a página só por conta de uma informação.



:)




segunda-feira, 27 de maio de 2013

LINQ to Entities

Utilizar LINQ to SQL é fácil,  mas só funciona com banco de dados MS-SQL.  

E se minha necessidade for utilizar o MySQL como banco de dados? Nesse caso teremos que utilizar o LINQ to Entities. O conceito é o mesmo e funciona para qualquer banco de dados.
Nesse caso eu vou utilizar o MySQL 5. 5.0.45.


Criei uma tabela com a seguinte estrutura:

Onde a coluna id  é por padrão incrementada 1 a 1.

Já no Visual Studio, precisamos adicionar uma conexão apontando para o MySQL.
Clique na guia Server Explorer e clique em adicionar conexão.  A janela a seguir irá aparecer:

Escolha MySQL e clique em ok.


Preencha os campos conforme seu banco de dados. No meu caso o nome do banco de dados é Projeto e esta localizada no Localhost. Vou usar o usuário root para acessar.

Após criar a conexão, é necessário adicionar o item ADO.NET Entity Data Model, como abaixo . Vou nomear o arquivo como Banco.edmx e clicar em Add. 



A janela a seguir será apresentada, escolha a opção “Generate from database”  e clique em Next.
Escolha a conexão para o banco de dados. E clique em Next.
Será apresentada a janela a seguir, nessa janela podemos escolher as entidades que vamos utilizar. No meu caso, somente a entidade usuário. Clique em Finish


Pronto, o mapeamento já foi feito e podemos trabalhar com a entidade criada.
Para inserir um registro faremos da seguinte maneira:
Banco bd = new Banco();//Representa o contexto do banco de dados

usuario u = new usuario();
u.nome = "Celso Zequim";
u.email = "czequim@gmail.com";
bd.AddTousuario(u);
bd.SaveChanges();

Ao pressionar F5, podemos ver que o registro foi inserido no Banco de dados:

Para ler essa informação e exibir no console é simples:

var usuarios = from ur in bd.usuario orderby ur.nome select ur;
foreach (usuario usr in usuarios)
{
       Console.Write(usr.nome);
       Console.WriteLine();               
}
           
O resultado é o seguinte:

Simples... e funciona para qualquer banco de dados, como: MySQL, Oracle, Postgres, Firebird... etc. 


:D


segunda-feira, 22 de abril de 2013

Snippet

Snippet ou Fragmento de Código é a forma de invocar códigos pré-estabelecidos pelo desenvolvedor em qualquer parte do sistema.

O Visual Studio já vem com diversos snippet  e um bom exemplo de um snippet que já existe no Visual Studio é o for.

Qualquer palavra que se digita no Visual Studio ele te mostra as possibilidades, algumas delas contém uma descrição dizendo que pode se invocar um snippet. Como no exemplo abaixo: 


É só pressionar duas vezes a tecla TAB que o snippet será invocado. O resultado é o seguinte:

No exemplo acima o Visual Studio adicionou a estrutura do for ao código.
O mesmo acontece com outras palavras, como  foreach, if, switch, etc.

Você pode criar o seu próprio snippet. O Snippet é um arquivo Xml e tem a seguinte estrutura:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
       <CodeSnippet Format="1.0.0">
             <Header>
                    <Title>Exemplo snippet</Title>
                    <Shortcut>exemplo</Shortcut>
                    <Description>Esse código adiciona for, if, while e foreach</Description>
                    <Author>Celso Zequim</Author>
                    <SnippetTypes>
                           <SnippetType>Expansion</SnippetType>
                           <SnippetType>SurroundsWith</SnippetType>
                    </SnippetTypes>
             </Header>
             <Snippet>
              <Declarations>
                     <Literal>
                           <ID>indice</ID>
                           <Default>i</Default>
                           <ToolTip>Indice</ToolTip>
                    </Literal>
                    <Literal>
                           <ID>maximo</ID>
                           <Default>Max</Default>
                            <ToolTip>Máximo Permitido</ToolTip>
                     </Literal>
        <Literal>
        <ID>valor</ID>
                            <Default>valor</Default>
        <ToolTip>Valor para comparação</ToolTip>
        </Literal>
        <Literal>
          <ID>Condicao</ID>
          <Default>condicao</Default>
          <ToolTip>Valor do switch</ToolTip>
        </Literal>
             </Declarations>
             <Code Language="csharp">
        <![CDATA[for (int $indice$ = 0; $indice$ < $maximo$; $indice$++)
                    {
                    $selected$ $end$
                    }
     
      if($valor$ == "")
                    {
                   
                    }
     
        switch ($Condicao$)
            {
                default:
            }
      ]]>
                    </Code>
             </Snippet>
       </CodeSnippet>
</CodeSnippets>

  • Header – Representa as informações exibidas no memento que se posicionar sobre a palavra de atalho,
  • Declarations – Local onde as variáveis que serão utilizadas no código deverão ser declaradas.
  • Code – Qual é o código que será impresso no momento em que o desenvolvedor invocar o snippet.

Repare que existe um código dentro do for, “$selected$ $end$”, esse código indica ao Visual Studio o local que o cursor deverá ficar assim que o desenvolvedor terminar de preencher as variáveis solicitadas.

Salve esse arquivo com a extensão “snippet”, no meu caso eu estou salvando como “exemplo.snippet”.  vá até o menu Tools e clique na opção “Code Snippets Manager”.

A seguinte janela será exibida:

Clique no botão Import e localize o arquivo que deseja importar. No meu caso é o “exemplo.snippet”.
Feito isso é só digitar em algum trecho de código o comando que você colocou em “Shortcut”, no meu caso é a palavra “exemplo”

 Note que quando posicionar sobre a palavra do seu Snippet, o Visual Studio irá lhe exibir as informações que você inseriu no Header e ao pressionar duas vezes a tecla TAB, o resultado será a seguinte:

        static void Main(string[] args)
        {

            for (int i = 0; i < Max; i++)
            {
               
            }

            if (valor == "")
            {

            }

            switch (condicao)
            {
                default:
            }
     
     
        }



Você pode usar o Snippet para adicionar qualquer código de forma rápida.


sexta-feira, 12 de abril de 2013

Criptografar senha

Aqui vai uma dica de como criptografar uma senha.

Eu particularmente utilizo um método um pouco peculiar mas que já vi várias pessoas utilizando.
No exemplo abaixo eu concateno  usuário e senha criando um Hash com essa informação. veja o exemplo:


using System.Security.Cryptography;


public static string AcertaSenha(string _login, string _senha)
{
    StringBuilder senha = new StringBuilder();

    MD5 md5 = MD5.Create();
    byte[] entrada = Encoding.ASCII.GetBytes(_login + "//" + _senha);
    byte[] hash = md5.ComputeHash(entrada);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
senha.Append(hash[i].ToString("X2"));
    }
    return senha.ToString();
}

Se eu passar o usuário "celso" e a senha "12345" o resultado será:
321F8F2C95B3AE3F5B9DAD4B58CF1819

em outra situação, se eu passar o usuário "CELSO" e a senha "12345" o resultado será:
5B105E94EB8276DB9738A92AFF8A490F


:)

quarta-feira, 10 de abril de 2013

Sessão - ASP.Net

As vezes precisamos manter algumas informações na memória para utilizar em qualquer lugar do site e
enviar informações por post ou query string nem sempre é a solução. A solução nesse caso é a utilização da sessão.

Sempre que acessamos um  site automaticamente u ma sessão é criada.

Podemos manter qualquer tipo de informação na sessão, texto, valores, imagens.  por exemplo:

Session["Nome"] = "Celso Zequim";

Para resgatar o valor da sessão é simples:

string nome =(string) Session["Nome"];

Esse valor estará disponível em qualquer página do site.

também é possível incluir um objeto na sessão.  por exemplo:

Criei um objeto para guardar o nome e o email do usuário logado no sistema.

public class UsuarioLogado
{

    public string Nome;
    public string email;
    public UsuarioLogado() { }
}

no arquivo Global.asax.cs indiquei no inicio da sessão qual é o objeto a ser carregado.
protected void Session_Start(object sender, EventArgs e)
{
    UsuarioLogado usuario = new UsuarioLogado();
    Session["UsuarioLogado"] = usuario;
}

ou seja, toda vez que alguém acessar o site, automaticamente será criado um objeto UsuarioLogado na sessão.
para atribuir um valor a esse objeto é só seguir o exemplo:

UsuarioLogado usuario = (UsuarioLogado)Session["UsuarioLogado"];
usuario.Nome = "Celso";
usuario.email = "czequim@gmail.com";