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" /> <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"> </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