16/09/2014 Development / asp.net

Hoje o pulo do gato é com relação a uma importante regra de SEO no qual o google prioriza os resultados de pesquisa.

Há um tempo, era comum ver urls do tipo index.asp?id=123&subid=321&produto=10

O meu blog mesmo era assim, até a escrita desse post.

Eis que um belo dia eu resolvi migrar a minha base de ACCESS, kkkkkkk para SQL Server e aproveitar e colocar a tal da url amigavel :-)

Primeiro eu pensei que fosse algo relacionado ao .htaccess, e é para servidores apache.

No meu caso, uso servidor windows, então a parada fica registrada no web.config

A configuração básica pra funcionar é a seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Reescrevendo a regra do artigo">
                  <match url="^artigo/([0-9]+)/([_0-9a-z-]+)" />
                  <action type="Rewrite" url="index.asp?i={R:1}" />
                </rule>
                <rule name="Reescrevendo a regra da categoria">
                  <match url="^categoria/([0-9]+)" />
                  <action type="Rewrite" url="index.asp?categoria={R:1}" />
                </rule>
                <rule name="Reescrevendo a regra da subcategoria">
                  <match url="^subcategoria/([0-9]+)/([_0-9a-z-]+)" />
                  <action type="Rewrite" url="index.asp?categoria={R:1}&amp;subcategoria={R:2}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

A tag match é o pulo! Tudo que começar com XXXXXX e que venha depois com as regras de sua expressão regular, vai ser redirecionado pra url em questão passando os parametros adicionais.

Molezinha neh!

Espero que sirva!

06/07/2013 Development / asp.net

Esse código é referente a uma customização de controle fazendo um override na classe RadioButtonList no framework 3.5

No framework 4.5 não precisa disso porque o controle tem alguns outros tipos de listagem.

Porque dessa customização? 

No framework 3.5 o RadioButtonList gera uma lista fora dos padrões da atualidade. Tipo gerando table, tr, td...Enfim, meio zuado. Então esse codigo serve pra tirar o lixo e deixar só oque você vai usar mesmo.

public class HtmlTextWriterNoSpan : HtmlTextWriter {
    ///Text writer.
    public HtmlTextWriterNoSpan(TextWriter textWriter) : base(textWriter)  { }
    
    protected override bool OnTagRender(string name, HtmlTextWriterTag key)  {
        // Do not render tags
        if (key == HtmlTextWriterTag.Span)
        return false;
        
        return base.OnTagRender(name, key);
    }
}

public class CustomRadioButtonList : RadioButtonList {

    protected override void Render(HtmlTextWriter writer) {
        // Use custom writer
        writer = new HtmlTextWriterNoSpan(writer);
        base.Render(writer);
    }

    protected override void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer){
        HtmlGenericControl li = new HtmlGenericControl("li");
        
        li.Attributes.Add("class", "it");
        li.Page = this.Page;
        
        ListItem item = this.Items[repeatIndex];
        RadioButton radioButton = new RadioButton();
        radioButton.Page = this.Page;
        radioButton.GroupName = this.UniqueID;
        radioButton.ID = this.ClientID + "_" + repeatIndex.ToString();
        radioButton.Text = this.Items[repeatIndex].Text;
        radioButton.Attributes["value"] = this.Items[repeatIndex].Value;
        radioButton.Checked = this.Items[repeatIndex].Selected;
        radioButton.TextAlign = this.TextAlign;
        radioButton.AutoPostBack = this.AutoPostBack;
        radioButton.TabIndex = this.TabIndex;
        radioButton.Enabled = this.Enabled;
        
        //radioButton.CssClass = "it";
        //radioButton.Style.Add(HtmlTextWriterStyle.BackgroundColor, this.Items[repeatIndex].Text);
        li.Controls.Add(radioButton);
        
        //writer.RenderBeginTag(HtmlTextWriterTag.Li);
        //writer.Write(item.Text);
        //writer.RenderEndTag();
        
        li.RenderControl(writer);
    }
}

Chamando o controle.

lstCampo = new CustomRadioButtonList();
lstCampo.ID = string.Format("seleciona-{0}", Campo);
lstCampo.CssClass = string.Format("lista-{0} radio-{0} customRadio", Campo);
((RadioButtonList)lstCampo).RepeatLayout = RepeatLayout.Flow;
((RadioButtonList)lstCampo).RepeatDirection = RepeatDirection.Horizontal;
lstCampo.AutoPostBack = true;

Espero que sirva.

08/10/2012 Development / asp.net

Vou colocar 2 soluções que fazem a mesma coisa.

A primeira é uma maneira mais tradicional e mais didática de ler. Usando ForEach, a segunda usando Linq.

public string ParseQueryString(params KeyValuePair<string, object>[] parameters)
        {

            ArrayList sb = new ArrayList();
           
            foreach (var key in parameters){
                sb.Add(key.Key + "=" + key.Value);
            }
            return String.Join("&", sb.ToArray());

Ok! Funciona perfeiramente, percorre a lista KeyValuePair e vai adicionando a chave e o valor num array e depois fazemos o join!

A segunda utilizando Linq - Ajuda do brotherzaço - Vinícius Rosa!

return string.Join("&", parameters.Select(x => string.Concat(x.Key,"=", x.Value.ToString())));

A cada iteração do x, ele concatena a key e o valor no próprio x, retornando assim uma lista e depois fazemos o join!

Eu prefiro a segunda pelo tamanho da escrita do código, mas a primeira fica mais fácil caso alguém venha fazer manutenção no código.

É isso, espero que sirva!

 

05/10/2012 Development / asp.net

System.IO.TextReader file = new StreamReader("C:/Projetos/IMS2/branches/ep.382/src/Web/Content/Documents/RelatorioBMFContracts.aspx");
var reader = file.ReadToEnd();

Só pra não esquecer!


 

02/10/2012 Development / asp.net

Eu conheço 2 maneiras de pegar apenas os números de uma string. A primeira é usando TryParse e a segunda usando Regex.

1) TryParse:

decimal sohNumero;

if (Decimal.TryParse(stringVerificada, out sohNumero))

Nesse caso, caso parse seja executado, sohNumero recebe o valor.

2) string sohNumero = new Regex(@"\D", RegexOptions.Compiled).Replace(stringVerificada, string.Empty);
                if (!string.IsNullOrEmpty(sohNumero))

Eu particularmente acho que a segunda opção é mais segura! Mas fica a critério de cada um ;-)

Espero que sirva!

 

21/09/2012 Development / asp.net

Esse post é em homenagem a meu amigo Vitinho ArcoVerde, mais conhecido como Telerik Man!!!! Que tem me ensinado e me passado mtos jumps the cats!

Action Result Descrição Exemplo
ViewResult Retorna uma View return View();
return View(“NomeDaView”, objeto-Model);
PartialViewResult Retorna uma partial View, que pode ser inserida dentro de outra View return PartialView();
return PartialView(“NomeDaPartialView”, objetoModel);
RedirectResult Redireciona para uma URL específica return Redirect(“http://www.site.com.br”);
RedirectToRouteResult Redireciona para outra action return RedirectToAction(“OutraAction”, “Outro-Controller”);
return RedirectTo-Route(“NomeDaRota”);
ContentResult Retorna texto, contenttype header opcional return Content(“Texto”,“textnplain”);
JsonResult Retorna um objeto no formato JSON return Json(objeto);
JavaScriptResult Retorna código Javascript que pode ser executado no cliente return JavaScript(“$(’#divResultText’).html(’JavaScript Passed’);”);
FileResult Retorna dados binários (arquivo em disco, por exemplo) return File(@“c:nrelatorio.pdf”, “applicationnpdf”);
EmptyResult Retorna um valor que é utilizado quando a action precisa retornar valor nulo return new EmptyResult();
20/09/2012 Development / asp.net
Comando Razor WebForm
Bloco de Código @{ int x = 123; string y = "Olá Mundo.";} <% int x = 123; string nome = "Felipe Huggler"; %> 
Expressão (HTML) @model.Message <%= model.Message %>
Expressão @Html.Raw(model.Message)  
Combinado Texto com códigos @foreach(var item in items) { <span>@item.Prop</span>} <% foreach(var item in items) { %><span><%= item.Prop %></span><% } %> 
Mesclando Códigos com tags HTML @if (foo) { @: Plain Texto e @editora.Name } <% if (foo) { %> Plain Text e <%= editora.Name %> <% } %>
Endereço de email Olá sidnei@gmail.com Razor reconhece o formato de e-mail básico e não é inteligente o suficiente para tratar o @ como um delimitador de código
Expressões explícitas ISBN@(isbnNumber) Neste caso, é preciso ser explícito sobre a expressão usando parênteses.
Encapsulando @ In Razor, you use the
@@foo to display the value
of foo
@ @ @ transforma em um único na resposta
Comentários do lado do Servidor @*
Esse e o lado do servidor
Com múltiplos comentários
*@
 
Mesclando expressões e textos Olá @titulo. @nome. Olá . .
18/09/2012 Development / asp.net

Essa é uma boa referencia para normalização de campos das tabelas

            var dic = new Dictionary<string, string>();
            dic.Add("Cd", "Codigo");
            dic.Add("Cod", "Codigo");
            dic.Add("Cli", "Cliente");
            dic.Add("Dt", "Data");
            dic.Add("Dc", "DebitoCredito");
            dic.Add("Ds", "Descricao");
            dic.Add("Dg", "Digito");
            dic.Add("Dv", "Digito");
            dic.Add("Ft", "Fator");
            dic.Add("Fat", "Fator");
            dic.Add("Fm", "Formato");
            dic.Add("Hh", "Hora");
            dic.Add("Hr", "Hora");
            dic.Add("Id", "Id");
            dic.Add("Im", "Imagem");
            dic.Add("Nm", "Nome");
            dic.Add("Nr", "Numero");
            dic.Add("Num", "Numero");
            dic.Add("Pc", "Percentual");
            dic.Add("Pz", "Prazo");
            dic.Add("Pr", "Preco");
            dic.Add("Prec", "Preco");
            dic.Add("Pu", "PrecoUnitario");
            dic.Add("Qt", "Quantidade");
            dic.Add("Qtd", "Quantidade");
            dic.Add("Qtde", "Quantidade");
            dic.Add("Sq", "Sequencia");
            dic.Add("Sg", "Sigla");
            dic.Add("Bl", "Status");
            dic.Add("In", "Status");
            dic.Add("St", "Status");
            dic.Add("Tg", "Tag");
            dic.Add("Tx", "Taxa");
            dic.Add("Tm", "Time");
            dic.Add("Tp", "Tipo");
            dic.Add("Vl", "Valor");

 

08/08/2012 Development / asp.net

Apenas um exemplo pra manter na mente.

        string[] names = { "Burke", "Connor", "Frank", "Everett", "Albert", "George", "Harris", "David" };

        IEnumerable query = from s in names
                                    where s.Length == 5
                                    orderby s
                                    select s.ToUpper();

        foreach (string item in query) {
            Response.Write(item);
        }

        IEnumerable querys = names
                                        .Where(s => s.Length > 5)
                                        .OrderBy(s => s)
                                        .Select(s => s.ToUpper());

 //****************************************************

string[] names = { "Albert", "Burke", "Connor", "David",
                   "Everett", "Frank", "George", "Harris"};

// agrupar pelo tamanho da string
var groups = names.GroupBy(s => s.Length);

foreach (IGrouping group in groups) {
    Console.WriteLine("Strings de tamanho {0}", group.Key);

    foreach (string value in group)
        Console.WriteLine("  {0}", value);
}

System.Collections.IList q = names.Where(x => x.Length > 1).Select(x => x.ToUpper()).ToList();   

Mais referências no link - http://msdn.microsoft.com/en-us/library/bb308959.aspx

 

01/08/2012 Development / asp.net

Esse problema ocorre porque um cliente faz uma requisição HTTP enviando o método POST para uma página HTML estática. Páginas estáticas HTML não suportam o método POST.

 

22/11/2010 Development / asp.net

Surgiu uma situação no trabalho, que precisava ler um arquivo txt, no qual as colunas estavam delimitadas pelo controle TAB.

Segue o código de exemplo:

        Dim delimiter As Char = ControlChars.Tab
        Dim delimitedText() As String

        Dim file As New System.IO.FileInfo(filepath)
        If file.Exists Then

            Dim doc As New StreamReader(filepath)
            While doc.Peek >= 0
                delimitedText = doc.ReadLine().Split(delimiter)

                'DADOS BÁSICOS DO PROCESSO
                '*************************************************************************
                If delimitedText(0) = "2" Then
                    c.ExecuteNonQuery("INSERT INTO TABELA (CMP1, CMP2, CMP3) VALUES ('" & delimitedText(1) & "','" & delimitedText(2) & "','" & Convert.ToDateTime(DateTime.ParseExact(delimitedText(4), "ddMMyyyy", System.Globalization.CultureInfo.CurrentCulture)).ToString("dd/MM/yyyy") & "')")
                End If

            End While

        End If

 

22/11/2010 Development / asp.net

Dim doc As StreamReader = File.OpenText(filepath)
While doc.Peek >= 0
    MsgBox(doc.ReadLine())
End While

 

09/11/2010 Development / asp.net

Convert.ToDateTime(data).ToString("yyyy-MM-dd")

 

31/08/2010 Development / asp.net

Tava fazendo um exemplo aki em casa, de como um webService responder um Objeto JSON direto pra pagina.

A parte de serializacao dos dados para o formato javascript, foi tranquilo, atraves da classe JavaScriptSerializer().Serialize(objeto);

Oque eu achei um pouco estranho, foi que mesmo retornando um objeto Javascript eh necessario realizar o parse do Json, usando o eval(resposta).

Segue um exemplo do WebService e a chamada usando jQuery.

WebService
//*****************************************************

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Script.Serialization;
using System.Web.Services.Protocols;

namespace WebService1
{
    public class Employee
    {
        public string Name { get; set; }
        public string Company { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public string Country { get; set; }
    }
   
    /// <summary>
    /// Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string HelloWorld()
        {
            return "{'resposta' : 'Hello World'}".ToString();
        }


        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string TestJSON()
        {
            Employee[] e = new Employee[2];
            e[0] = new Employee();
            e[0].Name = "Bill Gates";
            e[0].Company = "Microsoft";
            e[0].Address = "Sillicon Valley";
            e[0].Phone = "1234567890";
            e[0].Country = "US";
            e[1] = new Employee();
            e[1].Name = "Eike Batista";
            e[1].Company = "OGX";
            e[1].Address = "Brasil";
            e[1].Phone = "1234567890";
            e[1].Country = "BR";
            return new JavaScriptSerializer().Serialize(e);
        }
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
        public Employee[] TestXML()
        {
            Employee[] e = new Employee[2];
            e[0] = new Employee();
            e[0].Name = "Bill Gates";
            e[0].Company = "Microsoft";
            e[0].Address = "Sillicon Valley";
            e[0].Phone = "1234567890";
            e[0].Country = "US";
            e[1] = new Employee();
            e[1].Name = "Eike Batista";
            e[1].Company = "OGX";
            e[1].Address = "Brasil";
            e[1].Phone = "1234567890";
            e[1].Country = "BR";
            return e;
        }

    }
}

JavaScript
//*****************************************************

        function testJson() {
            $.ajax({
                type: "POST",
                url: "http://localhost:50385/Service1.asmx/TestJSON",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {

                    $("#jsonResponse").html(msg['d']);
                    var data = eval('(' + msg['d'] + ')');
                    var t = "<table border=1> <tr>" +
                    "<td> <strong>Name</strong></td> <td> " +
                    "<strong>Company</strong></td> <td> " +
                    "<strong>Address</strong></td> <td> " +
                    "<strong>Phone</strong></td> <td> " +
                    "<strong>Country</strong></td> </tr> ";
                    jQuery.each(data, function(rec) {
                        t = t + " <tr> <td> " + this.Name + "</td> <td> " +
                    this.Company + "</td> <td> " + this.Address +
                    "</td> <td> " + this.Phone + "</td> <td> " + this.Country + "</td> </tr> ";
                    });

                    t = t + " </table> ";
                    $("#jsonDiv").html(t);
                },
                error: function(msg) {

                }

            });
        };
       
       
        function testXml() {
            $.ajax({
                type: "POST",
                url: "http://localhost:50385/Service1.asmx/TestXML",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "xml",
                success: function(msg) {
                    alert(msg);
                }
            });
        };

OBSERVACAO:

Nao sei o porque, mas tive que navegar pelas propriedades da resposta e ver que o eval soh funciona com msg['d']. Realmente naum sei da onde apareceu esta propriedade 'd', mas tah funcionando, entaum eh isso que interessa ;-)...Bom eh isso, Bons Estudos galera!

 

09/08/2010 Development / asp.net

Você pode adicionar um diretório virtual, mudando o arquivo ApplicationHost.config

É uma maneira muito mais rápida doque ficar adicionando 1 a 1 no IIS.

C:\Windows\System32\inetsrv\config\applicationHost.config

 

15/03/2010 Development / asp.net

Essa classe é nativa do framework .Net

Essa classe tem 3 métodos interessantes:

  • Add

    Interlocked.Add(Counter.Count, 10) 'Adiciona 10 ao contador

  • Increment

    Interlocked.Increment(Counter.Count) 'Incrementa o contador

  • Decrement

    Interlocked.Decrement(Counter.Count) 'Decrementa o contado

Achei interessante porque você sai um pouco da rotina de fazer sempre a mesma coisa... count = count + 1, ou, count += 1

08/02/2010 Development / asp.net

Structure Pessoa

Private nome As String
Private idade As Integer
Private sexo As Sexualidade

Enum
Sexualidade
Masculino
Feminino
End Enum

Public Sub New(ByVal _nome As String, ByVal _idade As Integer, ByVal _sexo As Sexualidade)
nome = _nome
idade = _idade
sexo = _sexo
End Sub

Public Overloads Overrides Function ToString() As String
  
Return nome & " - " & idade.ToString() & " - " & sexo.ToString()
End Function

End Structure

Dim p As Pessoa = New Pessoa("Felipe Huggler", 26, Pessoa.Sexualidade.Masculino)
Response.Write(p)

13/01/2010 Development / asp.net

Segue código abaixo:

Endereço do webService - http://www.webservicex.net/stockquote.asmx?WSDL

Imports System.Xml
Imports System.Data
Imports System.IO

Partial Class _Default

Inherits System.Web.UI.Page

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim stock As New stockQuote.StockQuote
Dim result As String
Dim xmlReader As System.Xml.XmlTextReader
Dim DS As New DataSet

result = stock.GetQuote(TextBox1.Text)

xmlReader =
New System.Xml.XmlTextReader(result.ToString, System.Xml.XmlNodeType.Document, Nothing)
xmlReader.ReadOuterXml()

DS.ReadXml(xmlReader)
GridView1.DataSource = DS
GridView1.DataBind()

End Sub
End
Class

13/01/2010 Development / asp.net

O que é Generics
O conceito geral é bem simples. Trata-se de classes, structs, interface e métodos que não possui um tipo de dados fixo para trabalharmos. Ao invés disso ela é definida com um tipo genérico onde quem defini o seu tipo seré o desenvolvedor no momento de utilizá-la.

Com essa classe abaixo fica complicado trabalhar com tipos de dados, porque? Porque o tipo já está definido. No caso Object.

Public Class Manipulacao
     Dim _valor As Object
     Public Property Valor() As Object 
          Get
               Return _valor
          End Get
          Set
               _valor = value
          End Set
     End Property
End Class

 

Implementando o Generics

Public Class Manipulacao(Of T)
Dim _valor As T
Public Property Valor() As T

Get
Return _valor
End Get

Set
(ByVal value As T)
_valor = value
End Set

End
Property
End
Class

No momento da chamada, instânciamos um new da Classe e setamos o tipo!!!

Dim v As New Manipulacao(Of String)
v.Valor =
"sapato"

Dim s As New Manipulacao(Of Integer)
v.Valor = 50

20/01/2010 Development / asp.net

Depois de ver o site rodar, compilar bunitinho e colocar em producao, apresenta-se o seguinte ERRO no componente.

ADODB Version = 7.0.3300

Solucão:

Copie a pasta Local C:\program files\Microsoft.NET\Primary Interop Assemblies\ para o mesmo endereco no servidor.

Execute a linha de comando no MS-DOS

"C:\Windows\Microsoft.NET\Framework\v1.1.4322\GACUtil.Exe"   /i   "C:\program files\Microsoft.NET\Primary Interop Assemblies\adodb.dll"

Depois um iisreset...Só pra lembrar, ;-)

18/08/2009 Development / asp.net

Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Data
Imports System.Data.SqlClient
Imports System.Globalization

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

Dim strConexao As String = "Data Source=.\SQLEXPRESS;....."
Dim sSql As String = "SELECT Count(Nome) AS Total FROM Clientes; SELECT Nome, Email FROM Clientes"
Dim conn As SqlConnection = New SqlConnection(strConexao)

Dim r As SqlDataReader
Dim cmd As SqlCommand = New SqlCommand(sSql, conn)
cmd.CommandType = CommandType.Text

conn.Open()

r = cmd.ExecuteReader(CommandBehavior.CloseConnection)
r.Read()

Dim t As Integer = r.GetOrdinal("Total")
Response.Write(
"Total de Registros: " & r.GetInt32(t))

'****************** AQUI PASSA PRO PROXIMO SELECT

r.NextResult()

If (r.HasRows) Then
Dim nome As String = r.GetOrdinal("Nome")
Dim email As String = r.GetOrdinal("Email")

Response.Write("<table><tr><td><b>Nome</b></td><td><b>E-mail</b></td></tr>")

Dim ci As CultureInfo = New CultureInfo("pt-BR")
While (r.Read())
Response.Write(
"<tr><td>" + r.GetString(nome) + "</td><td>" + r.GetString(email) + "</td></tr>")
End While

Response.Write("</table>")
End If

If Not (r.IsClosed) Then
r.Close()
End If

End Sub

'****************** FIM

17/08/2009 Development / asp.net

    Public Property Nome() As String
        Get
// return nome por exemplo
        End Get
        Set(ByVal value As String)
// nome = value
        End Set
    End Property

31/07/2009 Development / asp.net

Colocando em Cache um RSS de outro Site.

Dim xDoc As New XmlDocument
Dim xnl As XmlNodeList

If Cache.Get("XMLDATA") Is Nothing Then
xDoc.Load(urlNews)
Cache.Insert("XMLDATA", xDoc, Nothing, DateTime.Now.AddSeconds(40), TimeSpan.Zero)
End If

xDoc = Cache.Get("XMLDATA")
xnl = xDoc.SelectNodes("//item")

Agora só varrer os nós !!!

01/04/2009 Development / asp.net

Exemplo fácil e rápido !!!!

        Dim con As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Conexao").ConnectionString())
        Dim sql As SqlCommand = New SqlCommand("Insert into table ( campo1, campo2 ) Values ( 'valor1','valor2' ) select @@identity", con)

        Dim codID As Integer

        con.Open()
        codID = sql.ExecuteScalar()

        lblResultado.Text = "Shoooow de Boleta !!!"

Obs: select @@identity [ recupera o valor baseado na chave primária ]

06/03/2009 Development / asp.net

Se você quer gravar Logs em determinadas chaves no Event Viewer, precisará habilitar as permissões.

Digamos que sua chave seja eCommerce

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\eCommerce]

Clique com o botão direito sobre a chave e permita as opções de escrita.

02/12/2008 Development / asp.net

2 coisas:

  1. Habilitar acesso anonimo
  2. Utilizar o codigo abaixo

Dim objWS as object = new webService.Service
objWS.PreAuthenticate = True
objWS.Credentials = System.Net.CredentialCache.DefaultCredentials

Jah era !!!!

29/10/2008 Development / asp.net

Essa é mais um códigozinho rapidinho pra quem precisar. É chatinho fazer essas coisas porque você tem que estar ligado em todas as propriedades, parametros, sintaxe do XmlDocument, emfim...segue abaixo um exemplo.

Dim XMLCONTAS As New XmlDocument
XMLCONTAS.LoadXml("<dados><Nome>Felipe Huggler</Nome><Idade>25</Idade></dados>")

Dim xmlNO As XmlNodeList = XMLCONTAS.SelectNodes("//Contas")
Dim xm As XmlNode

For i As Integer = 0 To xmlNO.Count - 1
xmlNO(i).ChildNodes().Item(1).InnerText
Next

Fácil né!!!!

15/10/2008 Development / asp.net

Aqui no trabalho, uma hora ou outra os desenvolvedores de C++ pedem pra gente colocar o Home Broker pra rodar direto na máquina deles. Nosso ambiente, por ter o Visual Studio já vem todo configurado, bastando somente atualizar o framework e tudo rodar legal. Mas na máquina dos caras, sempre é uma batalha. Uma rotina que é tiro e queda pra rodar logo na primeira, é reinstalar o framework.

C:\WINDOWS\Microsoft.NET\Framework\ versao \aspnet_reg.exe -i

18/09/2008 Development / asp.net

Temas e Skins é bem legal. Tem um monte de exemplo ai na Net, então resumindo, a parada funciona assim:

- Abrir Visual Studio
- New Theme
- New Skin

Faça o skin orientado aos objetos

Na página existem algumas maneiras de chamar o Skin.

Através do :

<%@ Page Theme="SEUTEMA" Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

ou via code behind

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs)
Theme = "Azul"
End Sub

18/09/2008 Development / asp.net

Mto bom e muito tranquilo de fazer!!!!

Iniciando as declarações no arquivo web.config

<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms loginUrl="login.aspx" protection="All" timeout="30">
        <credentials passwordFormat="Clear">
          <user name="devhood" password="password"/>
          <user name="someguy" password="password"/>
        </credentials>
      </forms>
    </authentication>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>

  <location path="admin/">
    <system.web>
      <authorization>
        <allow users="devhood" />
        <deny users="someguy" />
      </authorization>
    </system.web>
  </location>
  <location path="usersonly/">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="public/">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
</configuration>

Autenticação: Existe 4 tipos Windows|Forms|Passport|None

  • Forms: Esta tag indica o modo de autenticação de formulários e irá especificar as coisas como loginUrl, o tipo de proteção e o tempo limite de inatividade.
    • loginUrl: Quando um usuário não tem poderes para acessar perspectivas páginas, o usuário será enviada para este URL.
    • protection: Há quatro (4) tipos de proteção modos, All | none | Encryption|Validation.
    • timeout: Este é um valor inteiro indicando o número de minutos um cookie do usuário será válida para a autenticação. Após este período de inatividade, o usuário será forçado a re-autenticar.
    • credential: Esta é uma seção opcional se você quiser especificar o nome de usuário/senha em combinações aqui. As credenciais também tem um atributo chamado passwordFormat. Suas opções para a senha formato são: Clear|SHA1|MD5.
    • user: Esta é também uma tag opcional. Esta tag é bastante simples, atributo para o nome de usuário e senha para atribuir a senha.
    • authorization: Agora que temos nosso tipo especificado e a autenticação de contas de usuários, temos que especificar o modo como a autenticação vai ser aplicada ao nosso site. Nós usamos a authorization para isso. A autorização é inserida entre a system.web. No exemplo acima, vemos que a autorização  contém o <allow>. Isto irá permitir especificar os utilizadores que têm acesso ao site. E há também uma tag <deny> que irá especificar quais usuários estão negado o acesso. O formato dos usuários atributos é bem simples. É apenas uma vírgula delimitado por lista nomes de utilizador (ou seja, os usuários = "jsmith, jdoe, blá"). Há também dois valores especiais que podem ser utilizadas no atributo usuários. O primeiro é o * (asterisco). Esta é utilizada para designar "todos os acessos". Portanto, o exemplo acima permite o acesso a todos os usuários. A segunda é a ? (ponto de interrogação). Esta é utilizada para designar "anónimo" usuários. Você pode usar esse recurso para negar acesso anônimo que irá força para autenticar os usuários antes de entrar em algumas páginas Web.
    • location: Agora o que acontece quando nós queremos algumas partes do site a ser protegido e de outros a não ser protegido? ASP.NET usa <locations>.  Que é o caminho para aplicar um conjunto diferente de regras de segurança. No interior da tag, temos a tag system.web mais uma vez. A autorização é colocado dentro da tag system.web (tal como o uso de no primeiro <authorization>).

<html>
<head>
    <title>Login</title>
    <script language="C#" runat="server">
        void Login_Click(Object sender, EventArgs e) {
            if (FormsAuthentication.Authenticate(username.Text, password.Text))
                FormsAuthentication.RedirectFromLoginPage(username.Text, true);
            else
                status.InnerHtml += "Invalid Login";
        }
       
    </script>
</head>
<body>
    <p class=title>Login</p>
    <span id="status" class="text" runat="Server"/>
    <form runat="server">
    Username: <asp:textbox id=username cssclass="text" runat="Server"/><br />
    Password: <asp:textbox id=password textmode=Password cssclass="text" runat="Server"/><br />
    <asp:button id=login_button onclick="Login_Click" text="  Login  " cssclass="button" runat="Server"/>
    </form>
</body>
</html>

FormsAuthentication.Authenticate
O único botão de login na página da web chama o método Login_Click quando clicado. Neste método, usamos o FormsAuthentication.Authenticate (nome de usuário, senha) para obter ASP.NET para verificar as credenciais do usuário. Os parâmetros para este método é bastante simples e ele retorna apenas um valor booleano.
 
ou acesso através do Banco
 
void Login_Click(Object sender, EventArgs e) {
    String sHashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,"MD5");
    String sqlStmt = "Select username from Users where username='" + UserName.Text + "' and password='" + sHashedPassword + "'";
    SqlConnection sqlConn = new SqlConnection("server=localhost;uid=sa;pwd=password;database=master;");
    SqlCommand sqlCmd = new SqlCommand(sqlStmt, sqlConn);
    sqlCmd.Connection.Open();
    SqlDataReader sqlReader = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);

    if (sqlReader.Read())
        FormsAuthentication.RedirectFromLoginPage(username.Text, true);
    else
        status.InnerHtml += "Invalid Login";
}

18/09/2008 Development / asp.net

Public Class utils

Dim ha As HttpApplication = HttpContext.Current.ApplicationInstance
ha.Response.Write("Olá Mundo")

End Class

13/05/2008 Development / asp.net
If (DateTime.Compare(dt1, dt2) < 0) Then
{
                    Console.WriteLine("segunda data é maior")
}
else if (DateTime.Compare(dt1, dt2) == 0)
{
                    Console.WriteLine("segunda data é igual a primeira data")
}
                Else
{
                    Console.WriteLine("segunda data é menor")
}
18/09/2008 Development / asp.net

Essa semana uma nova tarefa foi designada a nossa equipe aqui na empresa. O objetivo era permitir o download de um arquivo no formato xls "Excel" sendo que nele deveria conter os registros de um grid populado em Tempo Real.

Desafio: Capturar os dados, jogar para uma página e fazer o download.

As Idéias: Inúmeras soluções foram tentadas, criamos um iframe, jogamos os dados para o iframe, depois submetemos o form do iframe, afim do coding-behind fazer o download do arquivo. Essa ideia era boa, mas tinha um inconveniente, que o Internet Explorer abre uma aba abaixo da toolbar alertando se o usuário quer realmente fazer o download, acontece, que nosso sistema tem um evento "onbeforeonload" que abre uma janela de fim de sessão, ou seja, quando o usuário clicasse em fazer o download, a tela se atualizaria e a janela de fim de sessão abriria.

Solução: Capturar os dados, envia-los via AJAX para uma página utilizando metodo POST, essa pagina quarda os dados numa Session, apos o onreadstate, abrir uma janela popup com o download do arquivo.

Segue os Script abaixo.

function handleResponse() {
        var strDados = document.getElementById('uwtCotacoes_div0').innerHTML;
        var strUrl = "testeFrame.aspx";
        var strParam = "acao=gravar&dados=" + escape(strDados);

        $.ajax({
                contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
                type: "POST",
                url: strUrl,
                data: strParam,
                error: function() {
                        alert('Erro no documento');
                },
                success: function(data) {
                        window.open('testeFrame.aspx?acao=salvar', 'novajanela');
                }
        });
}

Aqui o código da pagina testeFrame.aspx coloque isso no evento PageLoad

Dim acao = Request("acao")

If acao.ToString = "gravar" Then
     Session("FormCotacao") = Server.HtmlDecode(Request.Form("dados"))
Else
     Response.ClearContent()
     Response.Charset = String.Empty
     Response.Write(Session("FormCotacao"))
     HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=documento.xls")
     HttpContext.Current.Response.Charset = "utf-8"
     Response.End()
End If

04/05/2008 Development / asp.net
Dim text As New StreamWriter(Server.MapPath("doc.txt",True)
text.WriteLine(Session("dados"))
text.Flush()
text.Close()

Facil né!!!!

04/05/2008 Development / asp.net

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="iso-8859-1" fileEncoding="iso-8859-1" responseHeaderEncoding="iso-8859-1" resourceProviderFactoryType="string" enableBestFitResponseEncoding="true" culture="pt-BR" uiCulture="pt-BR"/>

04/05/2008 Development / asp.net

Imports System.Data

Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Password=;Data Source=" & Server.MapPath("dados.mdb"))
Dim cmd As New OleDb.OleDbCommand("SELECT nome FROM TABELA", con)
Dim dr As OleDb.OleDbDataReader

con.Open()
dr = cmd.ExecuteReader

While dr.Read
Response.Write(dr.GetString(0) & "")
End While

con.Close()
con = Nothing
cmd = Nothing
dr = Nothing

18/09/2008 Development / asp.net

Resgatar Valores

<configuration>
<appSettings>
<add key="appConexao" value="Provider=SQLOLEDB.1;Persist Security Info=False; User ID=sa;Initial Catalog=Artigos;Data Source=dbICARO" />
</appSettings>
</configuration>

Dim strConexao As String = System.Configuration.ConfigurationSettings.AppSettings("appConexao")

Customizando e definindo páginas de Erros

<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="frmErro.aspx">
<error statusCode="404" redirect="frmNaoEncontrada.aspx" />
</customErrors>
</system.web>
</configuration>

26/03/2008 Development / asp.net

Para trafegar dados em HTML no asp.net use

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="parent.WebForm1" validateRequest=false%> 

20/09/2008 Development / asp.net

Para dar permissão em Imagens, Script, arquivos que estão em outras pastas e que você só pode acessar quando logado, use o código abaixo.

<location path="Library" >
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>