Acessando valores em UserControls – ASCX

É importante dizer que precisamos armazenar o valor definido para a propriedade no ViewState, porque sem isso, um PostBack fará com que o valor seja perdido, não resultando no comportamento esperado. Isso não se faz necessário quando estamos expondo ou atribuindo um valor para um WebControl, pois o mesmo já trata de armazenar o valor no ViewState internamente.

Outra observação bastante importante que devemos nos atentar, pois infelizmente ao contrário de utilizarmos WebControls, que quando fazemos Drag & Drop no Visual Studio .NET, o mesmo declara o controle no CodeBehind para termos acesso ao mesmo. Já com os User Controls isso não acontece, obrigando-nos a declarar o controle com o mesmo ID que está no WebForm (ASPX) (ver figura ao abaixo).

Em primeiro lugar, veremos como fica a criação da propriedade que armazenará o valor para posteriormente utilizarmos no WebForm:

public string NomeUsuario{
    get{
        string nomeUsuario = ViewState["NomeUsuario"] as string;
        if(nomeUsuario != null)
            return nomeUsuario;

        return string.Empty;
    }
    set{
        ViewState["NomeUsuario"] = value;
    }
}

Analisando o código acima, temos uma simples propriedade que recebe e retorna um valor do tipo String e a armazena e recupera do ViewState. Para finalizar, depois de arrastado o User Control para o WebForm, basta irmos no CodeBehind e declarar o mesmo, seguindo as observações acima, reparando que ele seja declarado com o mesmo ID do ASPX:

protected Dados Dados1;

// Para acessar:

Dados1.NomeUsuario = "Nome do Usuário";
Response.Write(Dados1.NomeUsuario);
Publicidade

Enviando E-mails com .NET Framework 2.0

Como já mencionei anteriormente nestes links, a forma e opções de envio mudaram bastante no .NET Framework 2.0. Uma das novas funcionalidades, quais não mencionei nos posts anteriores, é utilizar o arquivo *.config da aplicação para definir algumas propriedades essenciais para o envio de e-mails, tais como: Host (endereço do servidor de SMTP), Porta e Credenciais.

Para possibilitar isso, a Microsoft adicionou novos elementos no arquivo *.config da aplicação, sendo eles: system.net, mailsettings, smtp e network. Claro que, nas versões do .NET 1.x, poderíamos definir uma key no arquivo *.config para não deixarmos estes valores (que mudam constantemente, como o endereço do servidor de SMTP) em hard-code. Esses novos elementos poupam-nos de escrever essas keys no appSettings da aplicação e, conseqüentemente, funções e/ou propriedades para recuperarmos isso. Para exemplificar a nova possibilidade de configuração no .NET Framework 2.0, vejamos o exemplo abaixo:

[ *.config ]
<configuration>
  <system.net>
    <mailSettings>
      <smtp deliveryMethod=”network”>
        <network host=”localhost” port=”25″ defaultCredentials=”true” />
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

[ C# ]
using System.Net.Mail;
//…
MailMessage msg = new MailMessage(“israel @ projetando.net”, “israel @ projetando.net”);
msg.Subject = “Teste”;
msg.Body = “Corpo da Mensagem”;
new SmtpClient().Send(msg);

Pode-se ver que ficou muito mais simplificado, pois quando a aplicação corre, o runtime se encarrega de ir até o arquivo de configuração e recuperar os dados necessários para enviar o email. Mas vale lembrar que, a classe SmtpClient suporta em seu construtor (ou através de suas propriedades), que voce defina estes valores via código.

Agora também faz muito mais sentido ter o namespace Mail dentro do System.Net, pois nas versões anteriores, se estivéssemos em um projeto do tipo Console, ou mesmo Windows Forms, tínhamos que fazer referencia à DLL System.Web.dll se quiséssemos enviar e-mails.