ASP.NET -  Livro de visitas em XML

 

Eu já criei dois livros de visitas que você pode acessar nos links abaixo:

Neste artigo vou mostrar rapidamente uma nova versão para um livro de visitas usando o controle repeater.

 

O exemplo foi criado usando o  Web Matrix. Portanto você deve abrir seu Web Matrix e criar um a nova página ASP.NET dando um nome sugestivo ao arquivo .aspx. Eu usei LivroVisitas.aspx

 

Este exemplo usa os seguintes controles :

 

1 Repeater - id = rpt

3 TextBox - id = txtAutor  , id=txtAssunto e id=txtTexto

1 Button - id = tnEnviar   

 

O código HTML do arquivo é gerado e visualizado na guia HTML esta a seguir :

 

<html>
<head>
    <title>Livro de Visitas em XML</title>
</head>
<body>
    <h2><img style="WIDTH: 239px; HEIGHT: 45px" height="32" src="maco1b.gif" width="233" border="0" />&nbsp;&nbsp;<font size="7">
<font face="Bookman Old Style" color="#0000a0" size="6">-
        Livro de visitas</font></font><font face="Bookman Old Style"> </font>
    </h2>
    <p>
        <font face="Bookman Old Style"></font> 
        <hr />
    </p>
    <form runat="server">
        <asp:Repeater id="rpt" runat="server">
            <HeaderTemplate>
                <table border="0" cellpadding="2" cellspacing="0" width="100%" style="font: 10pt verdana">
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td width="100%" bgcolor="#ffdead">
                        <%# DataBinder.Eval(Container.DataItem, "datetime") %> - <b>
                        <%# DataBinder.Eval(Container.DataItem, "assunto") %>
                     </b> - (IP --> <%# DataBinder.Eval(Container.DataItem, "IP") %>) 
                    </td>
                </tr>
                <tr>
                    <td width="100%">
                         <%# DataBinder.Eval(Container.DataItem, "Texto") %>... <u>
                         <%# DataBinder.Eval(Container.DataItem, "Autor") %></u> 
                        <br />
                        <br />
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
        <h3><font face="Verdana" color="purple" size="2"> 
            <hr />
            <font face="Times New Roman" color="#000000">&nbsp;</font>Escreva a sua Mensagem (Seja
            objetivo. Economize palavras...)</font> 
        </h3>
        <table style="WIDTH: 749px; HEIGHT: 159px" width="749">
            <tbody>
                <tr>
                    <td>
                        <font face="Verdana" size="2">Seu Email</font></td>
                    <td>
                        <asp:textbox id="txtAutor" runat="server" Width="449px" maxlength="50" columns="30"></asp:textbox>
                    </td>
                </tr>
                <tr>
                    <td>
                        <font face="Verdana" size="2">Assunto</font></td>
                    <td>
                        <asp:textbox id="txtAssunto" runat="server" Width="450px" maxlength="40" columns="50" Height="21px"></asp:textbox>
                    </td>
                </tr>
                <tr>
                    <td valign="top">
                        <font face="Verdana" size="2">Texto</font></td>
                    <td>
                        <asp:textbox id="txtTexto" runat="server" Width="600px" columns="80" textmode="MultiLine" rows="4"></asp:textbox>
                    </td>
                </tr>
                <tr>
                    <td align="right" colspan="2">
                        <p align="center">
                            <asp:button id="btnEnviar" onclick="btnEnviar_Click" runat="server" text="Enviar"></asp:button>
                        </p>
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
</html>

 

 

A seguir o código do script ASP.NET usando a linguagem VB.NET que pode ser visto na guia Code:

 

Dim ds as DataSet
Dim caminho As String
Dim IPCliente As String

Sub Page_Load(Src As Object, E As EventArgs)

        'caminho para o arquivo XML
        caminho = Server.MapPath("livrodevisitas.xml")

        If Not Page.IsPostBack Then

            'Se o arquivo XML não existir cria
            If Not File.Exists(caminho) Then
               IniciaArquivoXML()
            End If

            'chama as rotinas para preencher o dataset e exibir os dados
            PreencheDataSet()
            ExibeDados()
       end If

End Sub

Sub IniciaArquivoXML()
        'Cria un novo dataset
        ds = New DataSet()

        'Cria um novo datatable
        Dim Tabela As DataTable = ds.Tables.Add("livrodevisitas")

        'Define a coluna id
        Dim ColunaDados as DataColumn = Tabela.Columns.Add("id", Type.GetType("System.Int32"))

        'define o compo como autoincrental começando de 1 e aumentanto de 1 em 1
        With ColunaDados
            .AutoIncrement = true
            .AutoIncrementSeed = 1
            .AutoIncrementStep = 1
        End With

        'Define a coluna ID como chave primaria
        Dim arrPrimaryKey(1) As DataColumn
        arrPrimaryKey(0) = ColunaDados
        Tabela.PrimaryKey = arrPrimaryKey

        'Define as demais colunas
        Tabela.Columns.Add("datetime", Type.GetType("System.DateTime"))
        Tabela.Columns.Add("autor", Type.GetType("System.String"))
        Tabela.Columns.Add("assunto", Type.GetType("System.String"))
        Tabela.Columns.Add("texto", Type.GetType("System.String"))
        Tabela.Columns.Add("IP", Type.GetType("System.String"))

        'escreve a estrutura da tabela para XML
        ds.WriteXml(caminho, XMLWriteMode.WriteSchema)
End Sub

Sub PreencheDataSet()
        'preenche o Dataseet com os dados do arquivo XML
        ds = New DataSet()
        ds.ReadXml(caminho, XmlReadMode.ReadSchema)
End Sub

Sub ExibeDados()
        'Vincula os dados ao Repeater
        Dim dv As DataView = ds.Tables(0).DefaultView

        'exibe mensagens mais novaas primeiro
        dv.Sort = "id DESC"

        'atribui o dataview a datarepeater
        rpt.DataSource = dv
        rpt.DataBind()
End Sub

Sub btnEnviar_Click(sender As Object, e As EventArgs)

   'pega o ip do cliente 
   IPCliente = Request.UserHostAddress()

  if txtAutor.text <> "" and txtAssunto.text <> "" and txtTexto.text <> "" then
      if isEmail(txtAutor.Text.toString()) then

        'chama a rotina para preencher o dataset
        PreencheDataSet()

        'Inclui uma nova entrada no  DataSet
        Dim drw As DataRow = ds.Tables(0).NewRow()
        drw("datetime") = DateTime.Now()
        drw("autor") = txtAutor.Text.toString()
        drw("assunto") = txtAssunto.Text.toString()
        drw("texto") = Left(txtTexto.Text.toString(),60)
        drw("IP") = IPCliente

        ds.Tables(0).Rows.Add(drw)

        'Escreve para o XML
        ds.WriteXml(caminho, XMLWriteMode.WriteSchema)

        'chama a rotina para exibir os dados
        ExibeDados()

        'limpa as caixas de texto
        txtAutor.Text = ""
        txtAssunto.Text = ""
        txtTexto.Text = ""

      else
         txtAutor.text =  "" & "EMAIL INVÁLIDO !"
      end if
  end if

End Sub

Function isEmail(ByVal inputEmail As String) As Boolean

   'define a expressão para validar o email
   Dim strRegex As String = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))" _
& ([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"

   'cria um novo objeto 
   Dim re As Regex =  New Regex(strRegex)

   'verifica se o email é valido
   If re.IsMatch(inputEmail) Then
       Return (True)
   Else
       Return (False)
   End If

End Function

 

 

Neste código a novidade é a criação de uma tabela que irá preencher um dataset com os dados informados pelo usuário no formulário. O único dado que não é fornecido pelo usuário é o IP do cliente que é capturado em - IPCliente = Request.UserHostAddress()

 

O email é validado usando expressão regular e retorna True se o mesmo for válido.

 

Como o código esta comentado creio que não é necessário eu dizer mais nada.

 

Pegue o arquivo do exemplo aqui : livroVisitas.aspx

 


José Carlos Macoratti