LINQ to SQL: Utilizando a função getdate() do SQL Server

Postado por Daniel Garcia às 15:38 SEXTA-FEIRA, 23 DE JULHO DE 2010

Como vimos no post sobre LINQ to SQL, esta tecnologia nos oferece um grande ganho no desenvolvimento. Tanto em termos de praticidade quanto em termos tempo no desenvolvimento.

Porém existem algumas situações que precisamos utilizar recursos do banco de dados SQL Server e ficamos um pouco restritos. Isso aconteceu comigo, quando estava desenvolvendo uma aplicação de Atendimento On-line que consistia em duas "pontas": O lado do atendente e o lado do cliente. Porém essas pontas estavam hospedadas em servidores web distintos. E havia a necessidade da data atual para controlar o carregamento das mensagem.

O único problema, é que pelo fato da aplicação estar distribuida poderia haver diferença entre as datas desses servidores. A forma que encotrei para evitar isso era utilizar a função getdate() do SQL server.

Mas como fazer isso?
Muito simples!

Basta adicionar o seguinte método à classe data context, como no exemplo abaixo:

public partial class MeuDataContext 
{ 
 
public DateTime GetDate() 
 
{ 
   
return ExecuteQuery<DateTime>("SELECT GETDATE()").First(); 
 
} 
} 
 

Depois é só acessar o método através da instância do DataContext.

DateTime data = dbContext.GetDate();

Espero que a dica seja útil.

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Linq

ASP.NET: Trabalhando com a API do Twitter – Parte I (Exibindo mensagens do Twitter em uma página ASP.NET)

Postado por Daniel Garcia às 00:45 SEGUNDA-FEIRA, 23 DE NOVEMBRO DE 2009

Tenho visto que muitas pessoas vêm aderindo ao Twitter e que muitas ferramentas vêm sendo desenvolvidas em função disso.

Por isso, resolvi criar uma série de dicas que ajudarão aos desenvolvedores a desvendar os “macetes” de como trabalhar com a API do Twitter (http://apiwiki.twitter.com).

Nesta dica mostrarei como exibir as mensagens de seu Twitter em uma página ASP.NET de forma personalizada.

Como funciona?

1 – Criamos uma rotina que faz uma requisição ao serviço, informando como parâmetro o nome de usuário e a quantidade de mensagens que desejamos retornar. Com isso será retornado um XML contendo as mensagens deste usuário.

Daí então carregamos o XML em um DataSet para facilitar posteriormente a sua exibição.

Veja o código abaixo:

private DataSet RecuperarMensagens()
{
    
string usuario = "danielsgarcia";
    string quantidade = "3";
    string url; DataSet ds;

    try
   

        ds = new DataSet();
        url = string.Format("http://twitter.com/statuses/user_timeline.xml?screen_name={0}&count={1}", usuario, quantidade);

        System.Net. WebClient cliente = new System.Net.WebClient();

        System.IO.Stream stream = cliente.OpenRead(url);
        stream.Flush();

        ds.ReadXml(stream);

        return ds; 
    }
    catch (Exception ex)
    { 
        throw ex; 
    }
}

2 – O próximo passo é exibir os dados em sua página. Para isso eu utilizo um DataList, pois acho mais flexível na diagramação do layout. Porém podemos utilizar uma GridView ou outro controle.

Veja o a implementação do DataList no código da página:

    <form id="form1" runat="server">
    <div>
        <table cellpadding="0" cellspacing="0" width="300px">
            <tr>
                <td rowspan="2">
                    <asp:Image ID="ImageFoto" runat="server" />
                </td>
                <td>
                    Meu Twitter</td>
            </tr>
            <tr>
                <td>
                    <asp:HyperLink ID="HyperLinkNome" runat="server"></asp:HyperLink>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:DataList ID="DataListMensagens" runat="server">
                        <SeparatorTemplate>
                            <hr />
                        </SeparatorTemplate>
                        <HeaderTemplate>
                            <hr />
                        </HeaderTemplate>
                        <FooterTemplate>
                            <hr />
                        </FooterTemplate>
                        <ItemTemplate>
                            <asp:Label ID="LabelData" runat="server" Text='<%# Eval("created_at") %>'></asp:Label>
                            <br />
                            <asp:Label ID="LabelMensagem" runat="server" Text='<%# Eval("text") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:DataList>
                </td>
            </tr>
        </table>
    </div>
    </form>

3 – Então, precisamos codificar uma rotina para exibição dos dados, conforme o método a seguir:

private void ExibirMensagens()

    string nomeExibicao;
    string urlImagem;
    DataSet ds;

    try
    {
        ds = this.RecuperarMensagens();

        nomeExibicao = ds.Tables["user"].Rows[0]["screen_name"].ToString();
        urlImagem = ds.Tables["user"].Rows[0]["profile_image_url"].ToString();

        ImageFoto.ImageUrl = urlImagem;
        HyperLinkNome.Text = "@" + nomeExibicao;
        HyperLinkNome.NavigateUrl = "http://twitter.com/" + nomeExibicao;

        DataListMensagens.DataSource = ds.Tables["status"];
        DataListMensagens.DataBind();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

E para finalizar invocá-lo no evento Load da página:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
        this.ExibirMensagens();
}
 

Abaixo o resultado:

Espero que a dica seja útil.

Continuem acompanhando a série de post que farei sobre como trabalhar com a API do Twitter utilizando o ASP.NET.

Ah! Já ia me esquecendo! Siga-me no Twitter: http://twitter.com/danielsgarcia

3.8 ponto(s). Avaliado por 5 pessoas

  • Currently 3,8/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Corrigindo Problemas de Compatibilidade entre o Google Chrome e o ASP.NET Menu

Postado por Daniel Garcia às 16:37 SEXTA-FEIRA, 2 DE OUTUBRO DE 2009

Com o surgimento de novos navegadores surgiram algumas incompatibilidades com nossas páginas web. Em sequência ao post Corrigindo Problemas de Incompatibilidade de Páginas ASP.NET e o Internet Explorer 8, mostrarei como corrigir o problema de compatibilidade do navegador Google Chrome com o componente Menu do ASP.NET.

O problema ocorre porque o ASP.NET faz uma verificação se o navegador suporta ou não a execução de Java Script. Porém esta verificação nem sempre é muito eficiente. Que é o caso da verificação dos navegadores da família do Safari, como exemplo o Google Chrome.

Para corrigir o problema, precisamos forçar a execução de Java Script. Então precisaremos forçar com que o ASP.NET “entenda” que o navegador do cliente é um navegador atual, moderno. Para tanto precisaremos implementar o método Page_PreInit da página como o seguinte código:

protected void Page_PreInit(object sender, EventArgs e)
{
    if (Page.Request.ServerVariables["http_user_agent"].ToLower().Contains("safari"))
    {
        Page.ClientTarget = "uplevel";

    }
}

Espero que a dica seja útil.

5.0 ponto(s). Avaliado por 2 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Removendo acentos de um campo texto de uma página ASP.NET durante a digitação (Java Script)

Postado por Daniel Garcia às 19:41 TERÇA-FEIRA, 8 DE SETEMBRO DE 2009

Pessoal, vou dar uma dica de como podemos de forma simples remover caracteres acentuados de um campo durante a digitação. Para isso contarei com a ajuda de uma função Java Script.

A função que desenvolverei executará as seguintes tarefas:

1 – Pegar o valor digitado no campo texto;

2 – Localizar o caractere acentuado, conforme especificado dentro da variável “acento” da função;

3 – Substituir o caractere acentua do pelo caractere não acentuado correspondente, na variável “semacento”;

4 – Por fim, retornar o texto sem acentos para o campo de origem.

Veja a função Java Script a seguir:

    <script type="text/javascript" language="javascript">
        function retirarAcentos(campo) {
               var texto = campo.value;
 
             var acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ';
  
             var semacento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
  
            var nova='';

               for (i = 0; i < texto.length; i++) {
                     if (acento.search(texto.substr(i, 1)) >= 0) {
                          nova += semacento.substr(acento.search(texto.substr(i, 1)), 1);
   
               }
  
                  else {
                         nova += texto.substr(i, 1);
  
                  }
  
            }

               campo.value = nova;
   
     }

    </script>

Lembre-se o tag <script> deve estar contido dentro do tag <head> da página.

Adicionarei um objeto do tipo TextBox à página .aspx, que receberá por padrão o nome de objeto “TextBox1”:

<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </div>

</form>

O próximo passo é associar a chamada da função Java Script ao campo “TextBox1” da página. Para isso teremos que atribuir ao campo texto a tarefa de executar o evento “onkeyup”, que ira díspar a função.

Para isso utilizarei o evento Load da página ASP.NET. Conforme código a seguir:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

         If Not Page.IsPostBack Then

             TextBox1.Attributes.Add("onkeyup", "retirarAcentos(this);")

         End If 

End Sub 

Você poderá ver mais exemplos de como trabalhar com funções Java Script no ASP.NET na seção Java Script do blog.

Concluído! Agora basta executar a página e ver o resultado.

Espero que aproveitem a dica!

4.5 ponto(s). Avaliado por 2 pessoas

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Java Script

Acesso a dados com ASP.NET e MySql

Postado por Daniel Garcia às 11:43 QUINTA-FEIRA, 3 DE SETEMBRO DE 2009

Muitos provedores de internet oferecem o MySql como solução gratuita de banco de dados. Mostrarei o que você deve fazer para que sua aplicação ASP.NET possa acessar o MySql.

1 - Primeiramente, baixe o MySql Connector para .net em
http://dev.mysql.com/downloads/connector/net/6.0.html.
Sugiro que baixe "Windows Binaries, no installer (ZIP)".

2 - Descompacte o zip em uma pasta local de sua preferência.

3 - Em sua aplicação ASP.NET adicione uma referência para o arquivo "MySql.Data.dll".

4 - Adicione uma string de conexão em seu web.config:

<connectionStrings>
    <add name="StringTeste" connectionString="Server=[NOME_SERVIDOR]; Port=[PORTA]; Database=[NOME_BANCO]; Uid=[USUARIO]; Pwd=[SENHA]; pooling=false;" providerName="MySql.Data.MySqlClient"
/>
</connectionStrings>

5 - Em seu Webform faça o import / using dos namespaces MySql.Data e MySql.Data.MySqlClient.

6 - Para finalizar implemente o(s) método(s) para efetuar as operações com o MySql. Como exemplo o método abaixo que retorna um MySqlDataReader:

   public static MySqlDataReader Localizar(int id)
   {
       MySqlConnection connection = null;
       MySqlCommand command;
       MySqlDataReader dr;

       try
       {
           connection = new MySqlConnection();
           command = new MySqlCommand();

           connection.ConnectionString = ConfigurationManager.ConnectionStrings["StringTeste"].ConnectionString;

           command.Connection = connection;
           command.CommandText = "select id, campo1, campo2 from Tabela1 where id = @id order by campo1;";
           command.Parameters.Add("@id", MySqlDbType.Int32).Value = id;

           connection.Open();
           dr = command.ExecuteReader(CommandBehavior.CloseConnection);

           return dr;

       }
       catch (Exception ex)
       {
           throw ex;
       }
   }

Agora é com vocês! Espero que aproveitem essa dica!

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Banco de Dados

Efetuando Postback entre Páginas ASP.NET Diferentes (Cross-Page Postbacks)

Postado por Daniel Garcia às 21:33 QUARTA-FEIRA, 2 DE SETEMBRO DE 2009

Por padrão, controles do ASP.NET como o Button causam postback nas páginas, submetendo-as para si mesmas. Porém em algumas situações é necessário postar valores de uma página para outra para que sejam processados. Neste caso é necessário configurar os controles para que postem as requisições (requests) para uma página diferente a partir propriedade PostbackUrl. Basta somente informar o nome da página para qual desejamos postar.

Seguiremos os seguintes passo:

1 – Configurar o controle que efetuará o post para a página de destino.

<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/PaginaDestino.aspx" />

2 – Resgatar os valores postados pela página de origem.

Na página destino precisaremos resgatar os valores postados pela página origem. Para que possamos acessar os valores dos controles precisaremos utilizar o objeto Page.PreviousPage.

Veja o código a seguir que lê os valores digitados em um controle TextBox e os exibirá em um controle do tipo Label.

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.PreviousPage Is Nothing Then
            Dim TextBoxOrigem As TextBox
            SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), TextBox)

            If Not TextBoxOrigem Is Nothing Then
                Label1.Text = TextBoxOrigem.Text
            End If
        End If
    End Sub

 

Espero que a dica seja útil!

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Criando um Carrinho de Compras Simples utilizando ASP.NET e Cookies

Postado por Daniel Garcia às 18:57 QUINTA-FEIRA, 6 DE AGOSTO DE 2009

Neste post mostrarei como criar um carrinho de compras simples para seu site de e-commerce, utilizando ASP.NET e Cookies, dispensando a utilização de banco de dados.

Optei por utilizar cookies ao invés do banco de dados para armazenamento no carrinho, em função da performance e também porque o carrinho de compras normalmente é utilizado para armazenamento temporário dos produtos.

Neste exemplo utilizarei o banco de dados Northwind. Se você não tiver um banco de dados poderá baixar o Nothwind.

Para desenvolver a aplicação utilizarei o Visual Studio 2008 Professional, porém você poderá utilizar o Visual Web Developer 2008 Express Edition, disponibilizado gratuitamente pela Microsoft em: http://www.microsoft.com/express/.

Seguirei os seguintes passos para criação do carrinho de compras:

1 – Abra o Visual Studio.

2 – Crie um webform chamado Produtos.aspx. Neste webform carregarei os produtos do banco de dados Northwind, para que posteriormente possamos adicioná-los ao carrinho de compras.

A seguir, o screenshot da página Produtos.aspx:


Lista de Produtos

Veja parte do código da página Produtos.aspx:

<div>
   
<b>Produtos</b><br /><br
/>
   
<asp:GridView ID="gvwProdutos" runat="server" AutoGenerateColumns="False" onrowcommand
="gvwProdutos_RowCommand">
       
<Columns
>
           
<asp:BoundField DataField="ProductID" HeaderText="ID"
/>
           
<asp:BoundField DataField="ProductName" HeaderText="Nome"
/>
           
<asp:TemplateField
>
               
<ItemTemplate
>
                   
<asp:LinkButton ID="lbtnAdicionar" runat="server" CommandArgument='<%# Eval("ProductID") %>' 
                                          CommandName="Adicionar">Adicionar ao Carrinho</asp:LinkButton
>
               
</ItemTemplate
>
            
</asp:TemplateField
>
        
</Columns
>
   
</asp:GridView
>
   
<p><a href="Carrinho.aspx">Meu Carrinho</a></p
>
</div>

Veja a implementação da rotina de carregamento da grid de produtos e da rotina que adiciona os produtos no carrinho de compras:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Produtos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.CarregarProdutos();
    }

    // Este evento é executado quando clicar em "Adicionar ao Carrinho"
    protected void gvwProdutos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Adicionar")
        {
            // Verifica o id do produto
            string idProduto = e.CommandArgument.ToString();
            // Adiciona o produto ao carrinho de compras
            this.AdicionarAoCarrinho(idProduto);
            // Redireciona para página Carrinho.aspx
            Response.Redirect("Carrinho.aspx");
        }
    }

    // Carrega a grid com a listagem de produtos
    private void CarregarProdutos()
    {
        SqlConnection conexao = new SqlConnection("[STRING_DE_CONEXÃO]");
        SqlCommand comando = new SqlCommand("select ProductID, ProductName from products where supplierid = 2");
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();

        comando.Connection = conexao;

        da.SelectCommand = comando;
        da.Fill(ds);

        gvwProdutos.DataSource = ds;
        gvwProdutos.DataBind();
    }

    // Adiciona o Produto ao Carrinho
    private void AdicionarAoCarrinho(string idProduto)
    {
        HttpCookie cookie;

        // Se o cookie não existe, efetuamos sua criação
        if (Request.Cookies["Carrinho"] == null)
        {
            cookie = new HttpCookie("Carrinho");
            // Configura a expiração do Cookie para 4 horas
            cookie.Expires = DateTime.Now.AddHours(4);
            // Adiciona item ao cookie
            cookie.Values.Add(idProduto, null);
        }
        // Caso o cookie já exista
        else
        {
            bool existe = false;
            // Resgata o cookie
            cookie = (HttpCookie)Request.Cookies["Carrinho"];
            // Configura a expiração do Cookie para 4 horas
            cookie.Expires = DateTime.Now.AddHours(4);

            // Verifica se o ID do produto já foi inserido ao cookie
            foreach (string item in cookie.Values.AllKeys)
            {
                if (item == idProduto)
                {
                    existe = true;
                    break;
                }
            }

            // Se o produto não existir no carrinho ser adicionado
            if (!existe)
                cookie.Values.Add(idProduto, null);
        }

        // Grava o cookie
        Response.Cookies.Add(cookie);
    }
} 

3 – Crie outro webform chamado Carrinho.aspx onde exibiremos os produtos adicionados ao carrinho. Serão armazenados os “IDs” dos produtos dentro dos cookies.

A seguir, o screenshot da página Carrinho.aspx:


Carrinho de Compras

Veja parte do código da página Carrinho.aspx:

<div>
   
<b>Carrinho de Compras</b><br
/>
   
<br
/>
   
<asp:GridView ID="gvwCarrinho" runat="server" AutoGenerateColumns="False" OnRowCommand
="gvwCarrinho_RowCommand">
       
<Columns
>
           
<asp:BoundField DataField="ProductID" HeaderText="ID"
/>
           
<asp:BoundField DataField="ProductName" HeaderText="Nome"
/>
           
<asp:TemplateField
>
               
<ItemTemplate
>
                   
<asp:LinkButton ID="lbtnRemover" runat="server" CommandArgument='<%# Eval("ProductID") %>
'
                                          
CommandName="Remover">Remover Produto</asp:LinkButton
>
               
</ItemTemplate
>
           
</asp:TemplateField
>
       
</Columns
>
        <EmptyDataTemplate
>
           
O carrinho está vazio!
        </EmptyDataTemplate
>
   
</asp:GridView
>
   
<p><a href="Produtos.aspx">Continuar Comprando</a></p
>
</div>

Veja a implementação da rotina que exibe os produtos adicionados ao carrinho de compras e a rotina que remove os produtos do carrinho: 

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Carrinho : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.CarregarCarrinho();
    }

     // Este evento é executado quando clicar em "Adicionar ao Carrinho"
    protected void gvwCarrinho_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Remover")
        {
            // Verifica o id do produto
            string idProduto = e.CommandArgument.ToString();
            // Remove porduto do carrinho
            this.RemoverDoCarrinho(idProduto);
            this.CarregarCarrinho();
        }
    }

    // Carrega a grid com os produtos do carrinho
    private void CarregarCarrinho()
    {
        // Recupera os ids dos produtos do cookie
        string produtos = this.RecuperarIDProdutos();
        SqlConnection conexao = new SqlConnection("[STRING_DE_CONEXÃO]");
        SqlCommand comando = new SqlCommand();
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();

        comando.Connection = conexao;

        if (!string.IsNullOrEmpty(produtos))
        {
            comando.CommandText = "select ProductID, ProductName from products where supplierid = 2 and ProductID in (" + produtos + ")";

            da.SelectCommand = comando;
            da.Fill(ds);

            gvwCarrinho.DataSource = ds;

        }

        gvwCarrinho.DataBind();

    }

    // Remove porduto do carrinho
    private string RecuperarIDProdutos()
    {
        string ids = null;
        int index = 1;

        // Resgata o cookie
        HttpCookie cookie = (HttpCookie)Request.Cookies["Carrinho"];

        // Verifica se o ID do produto já foi inserido ao cookie
        foreach (string item in cookie.Values.AllKeys)
        {
            ids += item;

            if (index < cookie.Values.Count)
                ids += ",";

            index += 1;
        }

        return ids;
    }

    private void RemoverDoCarrinho(string idProduto)
    {
        // Resgata o cookie
        HttpCookie cookie = (HttpCookie)Request.Cookies["Carrinho"];
        // Configura a expiração do Cookie para 4 horas
        cookie.Expires = DateTime.Now.AddHours(4);
        // Remove o id do produto do cookie
        cookie.Values.Remove(idProduto);
        // Grava o cookie

        Response.Cookies.Add(cookie);
    }
} 

Conclusão 

Este é um exemplo básico da criação de um carrinho de compras em ASP.NET. Use a sua criatividade e explore novos recursos e funcionalidades.

Espero que aproveitem esta dica!

2.0 ponto(s). Avaliado por 2 pessoas

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | E-Commerce

Limitando a Quantidade de Caracteres Digitados em um TextBox do tipo MultiLine

Postado por Daniel Garcia às 20:35 SÁBADO, 1 DE AGOSTO DE 2009

O TexBox é um dos controles de digitação mais utilizados. Ele possui três formatos para digitação de dados que podem ser configurados pela propriedade TextMode:

  • SingleLine: Permite digitação em uma única linha
  • MultiLine: Permite digitação em múltiplas linhas
  • Password: Permite digitação em formato senha. Oculto por caracter (por exemplo: “*”)

Os TextModes SingleLine e Password permitem a limitação da quantidade de caracteres digitados através da propriedade MaxLength. Porém no modo MultiLine está propriedade é desconsiderada.

Para entendermos o porquê deste comportamento, basta lembrarmos que ao executar uma aplicação ASP.NET os WebControls são processados e o resultado gerado nada mais é que o bom e velho HTML. Consequentemente, nosso TextBox MultiLine gera o controle “textarea” do HTML, que não possui propriedade para limitação da quantidade de caracteres digitados.

Para que possamos solucionar este problema, mostrarei uma maneira de limitar os caracteres digitados utilizando a ajuda do Java Script.

Seguiremos os seguintes passos:

1 - Crie um Webform conforme especificações abaixo:


Webform contendo TextBox MultiLine

Veja parte do código fonte do Webform:

...
<
asp:TextBox ID="TextBox1" runat="server" Height="87px" TextMode="MultiLine" Width="267px"></asp:TextBox>
<br />
Caracteres restantes: <span id="contador">100</span>. (Máximo de Caracteres: 100)
...

Vejamos que o código acima é composto somente por um TextBox em modo MultiLine e adicionamente um "span" que chamado "contador" que utilizarei para exibir a quantidade restante de caracteres a sesem digitados.

2 - Crie uma função Java Script chamada "limitarTexto" em seu Webform, que terá como parâmentros: campo (TextBox), contador (span), númeroLimite (quantidade de caractéres máximo). Conforme código a seguir:

...
<
head runat="server">
    <title></title>
    <script type="text/javascript" language="javascript">

function limitarTexto(campo, contador, numeroLimite) {

    if (campo.value.length > numeroLimite) {

        campo.value = campo.value.substring(0, numeroLimite);

    }
    else {

        contador.innerHTML = numeroLimite - campo.value.length;

    }

}

    </script>
</
head>
...

3 - O terceiro e último passo é associar a função "limitarTexto" ao controle TextBox1. Para isso precisaremos implementar o evento Load do Webform. Adicionaremos os atributos "onkeypress" e "onkeyup" ao TextBox para chamar a função. Veja a implementação abaixo:

protected void Page_Load(object sender, EventArgs e)
{

     if (!Page.IsPostBack)
    {
        TextBox1.Attributes.Add(
"onkeypress", "limitarTexto(this, contador, 100);");
        TextBox1.Attributes.Add(
"onkeyup", "limitarTexto(this, contador, 100);"); 
    }

}

Observação: Observe que passei "this" no parâmetro "campo" da função. Isso indica que é o próprio componente (TextBox1).

Agora podemos executar a aplicação e testar o funcionamento.

Esperam que esta dica seja útil! Até a próxima e bons códigos!

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Java Script

Corrigindo Problemas de Incompatibilidade de Páginas ASP.NET e o Internet Explorer 8

Postado por Daniel Garcia às 17:10 QUARTA-FEIRA, 29 DE JULHO DE 2009

Tenho visto que algumas pessoa estão encontrando algumas dificuldades em compatibilizar suas aplicações com o Internet Explorer 8. Então resolvi postar algumas dicas que a Microsoft disponibilizou no site do MSDN.

Este documento o conduzirá pelas etapas necessárias para corrigir seu site a fim de que ele seja renderizado corretamente no Windows Internet Explorer 8.

A correção rápida a curto prazo

Você mantém uma página da Web que funciona corretamente no Windows Internet Explorer 7 e gostaria de atualizá-la para que ela funcionasse no Windows Internet Explorer 8 com o mínimo possível de modificações. Há dois métodos disponíveis. Você pode adicionar a cada página uma marca META de modo de compatibilidade, o que fará com que o Windows Internet Explorer 8 renderize a página da mesma maneira que no Windows Internet Explorer 7. Ou, se você controlar seu servidor Web, poderá fazer com que o servidor adicione a compatibilidade automaticamente configurando-o para enviar um cabeçalho de resposta HTTP personalizado equivalente à marca META com cada página da Web.

Como modificar cada página

Coloque a seguinte marca META HTML no elemento HEAD de cada página da Web (antes de qualquer marca que não seja TITLE ou META):

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>

Isso instruirá o Windows Internet Explorer 8 a renderizar cada página como se fosse o Windows Internet Explorer 7, corrigindo o seu site.

Como configurar o servidor para modificar cada página automaticamente

Para adicionar automaticamente a mesma compatibilidade a cada página como a marca META HTML, configure seu servidor para enviar o seguinte cabeçalho:

X-UA-Compatible: IE=EmulateIE7

Para configurar o IIS (Serviços de Informações da Internet da Microsoft) 7.0, configure o arquivo Web.config da seguinte maneira:

<?xml version="1.0" encoding="utf-8"?>
<
configuration>
    <
system.webServer>
        <
httpProtocol>
            <
customHeaders>
                <
clear />
                <
add name="X-UA-Compatible" value="IE=EmulateIE7" />
            </
customHeaders>
        </
httpProtocol>
    </
system.webServer>
</
configuration>

(Adicione o arquivo Web.config ao diretório em que deseja aplicar a alteração)

Observe que as marcas de alternância de modos de compatibilidade META presentes na marcação real de uma página da Web sempre prevalecem sobre a declaração do cabeçalho HTTP.

Para obter mais informações sobre como configurar seu servidor Web (incluindo o IIS 6.0) para enviar o cabeçalho de resposta HTTP personalizado, leia os documentos a seguir.

Essas correções a curto prazo são recomendadas apenas para uso rápido e temporário. Eventualmente, você deverá modificar seu site de forma que ele envie código baseado em padrões para o Windows Internet Explorer 8 e versões posteriores e código herdado para as versões anteriores do Windows Internet Explorer.

A solução permanente recomendada 

Você mantém uma página da Web que funciona corretamente no Windows Internet Explorer 7. Você deseja criar uma página baseada em padrões que funcione corretamente no Windows Internet Explorer 8 com tratamento especial para as versões de navegador herdadas. Depois de ter adicionado a nova funcionalidade CSS 2.1 ao fluxo de páginas principal, você precisará configurar o modo de compatibilidade como Padrões do IE8 e usar comentários condicionais a fim de fornecer correções para versões herdadas do Windows Internet Explorer.

Definindo o modo de compatibilidade como Padrões do IE8

Coloque a seguinte marca META HTML na parte superior do elemento HEAD de cada página da Web (antes de qualquer marca que não seja TITLE ou META):

<meta http-equiv="X-UA-Compatible" content="IE=8"/>

Isso instruirá o Windows Internet Explorer 8 a renderizar cada página usando os padrões CSS 2.1.

Você também pode configurar seu servidor Web, como demonstrado acima, para fazer alterações em todo o site; basta alterar o valor do conteúdo para “IE=8”. Lembre-se de que quaisquer alterações de META no nível de página prevalecem sobre os valores do cabeçalho; portanto, os cabeçalhos no nível de página talvez precisem ser alterados ou removidos.

Usando comentários condicionais para manter seu site funcionando com navegadores herdados

O exemplo de código a seguir ilustra como usar comentários condicionais para direcionar o CSS para versões atuais ou herdadas do Windows Internet Explorer.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
<html>
   <head>
      <title>Test Page</title>
      <meta http-equiv="X-UA-Compatible" content="IE=8"/>
      <!--[if gte IE 8]>
      <style type="text/css">
      body {
       color: #0000ff;
       background-color: #000000;
      }
      </style>
      <![endif]-->
      <!--[if lt IE 8]>
      <style type="text/css">
      body {
       color: #000000;
       background-color: #ffffff;
      }
      </style>
      <![endif]-->
   </head>
   <body>
      <h1>
      <!--[if gte IE 8]>
      Chapter 1.
      <![endif]-->
      First Chapter
      </h1>
      <h1>
      <!--[if gte IE 8]>
      Chapter 2.
      <![endif]-->
      Second Chapter
      </h1>
      Text any version will see.
   </body>
</html>

Para obter mais informações sobre técnicas de detecção de navegadores, leia os documentos a seguir. 

A solução permanente descrita aqui é o método mais recomendado para a correção de seu site. Ao aderir a esses padrões, seu site funcionará igualmente bem nas versões herdadas do Windows Internet Explorer e no Windows Internet Explorer 8, bem como em quaisquer versões futuras lançadas.

Fonte: MSDN - http://msdn.microsoft.com/pt-br/library/cc817570.aspx

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Internet Explorer

Criptografando a QueryString de uma URL com ASP.NET

Postado por Daniel Garcia às 21:21 DOMINGO, 26 DE JULHO DE 2009

No desenvolvimento Web é muito comum utilizarmos querystrings para passar informações de uma página para outra.

Porém, em algumas situações o uso de querystrings pode tornar a aplicação vulnerável, permitindo que o usuário possa ter acesso a alguma informação a qual não deveria. Isso acontece em função da curiosidade do usuário, que na base da tentativa, pode alterar o valor da querystring.

Mostrarei uma maneira de inibir esse tipo de ação, utilizando uma rotina de criptografia simples, mas bastante útil, que permitirá criptografar e descriptografar a informação que será passada via querystring.

Veja a classe que chamei de “Criptografia”, contendo os métodos “Criptografar” e “Descriptografar”:

using System;
using
System.Text;
using System.IO;
using System.Security.Cryptography;

public class Criptografia 
{
    
private static byte
[] chave = { };
   
private static byte
[] iv = { 12, 34, 56, 78, 90, 102, 114, 126 };

    public Criptografia()
    {    

    }

    public static string Criptografar(string valor, string chaveCriptografia)
    {
        DESCryptoServiceProvider des; 
        MemoryStream ms; 
        CryptoStream cs; byte[] input;

        try
        {
            des = new DESCryptoServiceProvider();
            ms = new MemoryStream();

            input = Encoding.UTF8.GetBytes(valor);chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));

            cs = new CryptoStream(ms, des.CreateEncryptor(chave, iv), CryptoStreamMode.Write);
            cs.Write(input, 0, input.Length);
            cs.FlushFinalBlock();

            return Convert.ToBase64String(ms.ToArray());
       
}
        catch (Exception ex)
       
{
            throw ex; 
        }
    }

    public static string Descriptografar(string valor, string chaveCriptografia)
   
{
        DESCryptoServiceProvider des;
        MemoryStream ms; 
       
CryptoStream cs; byte[] input;

        try
       

            des = new DESCryptoServiceProvider();
           
ms = new MemoryStream();

            input = new byte[valor.Length];
            input = Convert.FromBase64String(valor.Replace(" ", "+"));

            chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));

            cs = new CryptoStream(ms, des.CreateDecryptor(chave, iv), CryptoStreamMode.Write);
           
cs.Write(input, 0, input.Length);
           
cs.FlushFinalBlock();

            return Encoding.UTF8.GetString(ms.ToArray());
       
}
       
catch (Exception ex)
       
{
            throw ex;
        }
    }
}

Para testar o funcionamento da rotinha criei dois webforms: “Pagina1.aspx” e “Pagina2.aspx”.

Na “Pagina1.aspx” adicionei um Button e implementei o seguinte código para o evento Click. Onde é montada a URL com o valor da querystring criptografado pelo método “Criptografar” da Classe “Criptografia”. Escolhi o valor 12 como ID de exemplo: 

protected void Button1_Click(object sender, EventArgs e)
{
    string url = "Pagina2.aspx?id=" + Criptografia.Criptografar("12", "#!$a36?@");

    Response.Redirect(url);
}

Já na “Pagina2.aspx”, adicionei um Label e implementei o seguinte código para o evento Load da página. E exibirá o valor da querystring, já descriptografado no Label:

protected void Page_Load(object sender, EventArgs e)
{
    string querystring = Request.QueryString["id"];

    Label1.Text = Criptografia.Descriptografar(querystring, "#!$a36?@");
}

Observe o resultado:


Querystring criptografada e resultado descriptografado

 

Agora você poderá criar aplicações mais seguras utilizando querystring.
Até a próxima e bons códigos!

5.0 ponto(s). Avaliado por 3 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

.NET Framework | ASP.NET

Sobre o Autor

Daniel Garcia - MCP, MCTS, MCPD
Meu nome é Daniel Garcia, venho atuando no mercado de tecnologia há mais de uma década. Durante esse tempo tive a oportunidade de trabalhar com diversas tecnologias, principalmente Microsoft. Conquistei os títulos: MCP, MCTS, MCDP e MCT. Desde então, venho contribuindo com toda a Comunidade, divulgando meu conhecimento das tecnologias Microsoft.