65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 访客录入表单

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.88/5 (4投票s)

2004 年 8 月 9 日

3分钟阅读

viewsIcon

106687

downloadIcon

630

一个带有 XML 控件的访客录入表单。

目录

创建访客留言簿

我最初并没有打算重新发明轮子,而是试图复用之前一位贡献者提供的代码,Laurent Kempe 的 ASP.NET 访客留言簿。由于原始代码是 VC++ 环境下的,我将其改写以适应 VB.NET 语言。结果发现,从原始代码编写到现在,该文章中 viewPage 的一些重载函数已经过时,并且推荐了其他修改,尤其是关于 XSLT Transform 方法的修改。在这篇文章中,直接使用了工具箱中的 XML 控件来生成 HTML 格式的访客留言簿。

访客留言簿所需的字段

通常,在访客留言簿中,需要收集访问您网站的用户的信息。您希望包含一个访客留言簿来获取这些信息。

访客留言簿中需要以下条目 [可自定义]

  • 名称
  • 电子邮件
  • 主页 (URL)
  • Location
  • 注释
  • 日期
  • 一个布尔值,表示是否为私人访客

访客录入页面的 UI

由于信息是从访客录入页面检索的,因此添加一个 Web 窗体并添加各种控件。为了使所有控件良好对齐,将它们全部放在此 Web 窗体对象的 form 控件内的 table 中。

以下 HTML 代码显示了嵌套在 'form' 中的 'table'。

<form id="Form1" method="post" runat="server">
<TABLE id="Table1" 
    style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" 
    cellSpacing="1" cellPadding="1" width="300" border="1">
    <TR>
        <TD>Name</TD>
        <TD>
            <asp:TextBox id="TextBoxName" runat="server">
            </asp:TextBox>
        </TD>
    </TR>
    <TR>
        <TD>E-Mail</TD>
        <TD>
            <asp:TextBox id="TextBoxEMail" runat="server">
            </asp:TextBox>
        </TD>
    </TR>
    <TR>
        <TD>Homepage Title</TD>
        <TD>
            <asp:TextBox id="TextBoxHomepageTitle" runat="server">
            </asp:TextBox>
        </TD>
    </TR>
    <TR>
        <TD>Homepage URL</TD>
        <TD>
            <asp:TextBox id="TextBoxHomepageURL" runat="server">
            </asp:TextBox>
        </TD>
    </TR>
    <TR>
        <TD>Location</TD>
        <TD>
            <asp:TextBox id="TextBoxLocation" runat="server">
            </asp:TextBox>
        </TD>
    </TR>
    <TR>
        <TD>Comments</TD>
        <TD>
            <asp:TextBox id="TextBoxComments" runat="server">
            </asp:TextBox>
        </TD>
    </TR>
    <TR>
        <TD>Private</TD>
        <TD>
            <asp:CheckBox id="CheckBoxPrivate" runat="server">
            </asp:CheckBox>
        </TD>
    </TR>
</TABLE>
<asp:Button id="ButtonContinue" 
     style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 232px"
     runat="server" Text="SignUp" Width="144px" Height="32px">
</asp:Button>
</form>

访客信息的持久化

用户输入的信息将存储在 XML 文件中,而不是数据库中。该文件将命名为 guestbook.xml,并且具有 guestbook.html 中所示的结构。

这是 guestbook.xml 页面,已填充了一些访客信息。

<?xml version="1.0" encoding="ISO-8859-1"?>
<guestbook>
  <guest private="yes">
    <name>David Frost</name>
    <email>df@yahoo.com</email>
    <homepage url="www.frost.com">David Frost News</homepage>
    <location>England</location>
    <comment>Nothingmuch</comment>
    <date>Friday, July 30, 2004 - 5:02:33 PM</date>
  </guest>
  <guest private="no">
    <name>Sandil</name>
    <email>sandil@yahoo.com</email>
    <homepage url="www.Sandilhome.com">UAE</homepage>
    <location>uae</location>
    <comment>test this one</comment>
    <date>Monday, July 26, 2004 - 5:11:12 PM</date>
  </guest>
  <guest private="yes">
    <name>Jayaram Krishnasawamy</name>
    <homepage url="http://www.mysorian.com/htek">Programmer</homepage>
    <location>137 Tennyson Drive</location>
    <comment>So,so</comment>
    <date>Thursday, July 23, 2004 -02:52 PM</date>
  </guest>
</guestbook>

访客录入页面背后的代码(带注释)

单击提交按钮时,将按顺序执行以下代码

  1. 将加载 XMLDocument 'Guestbook.xml'。
    Dim xdoc As New XmlDocument
    xdoc.Load(Server.MapPath("guestbook.xml"))
  2. 将检索复选框条目并将其设置为文本值。
    Dim prev As String
    If (CheckBoxPrivate.Checked) Then
        prev = "yes"
    Else
        prev = "no"
    End If
  3. 声明并定义一个新的文档元素,如接下来的代码所示,名为 "private" 的复选框是 "guest" [根] 元素的属性。
    Dim elem As XmlElement
    elem = xdoc.CreateElement("guest")
    elem.SetAttribute("private", prev)
  4. 通过以下方式将一个新的 'Guest' 添加到此文件的开头:
    xdoc.DocumentElement.PrependChild(elem)
  5. 要添加其他条目,将使用 addTextElement 函数,该函数接收:
    1. 作为常量的 XmlDocument
    2. 作为常量的元素,
    3. 元素的名称,以及
    4. 从表单中检索它的位置。
  6. addTextElement 函数的代码如下:
    Private Sub addTextElement(ByVal doc1 As XmlDocument, ByVal _
       elem1 As XmlElement, ByRef strTag As String, ByRef strVal _
       As String)
        Dim nodeElem = doc1.CreateElement(strTag)
        Dim nodeText = doc1.CreateTextNode(strVal)
        elem1.AppendChild(nodeElem)
        nodeElem.AppendChild(nodeText)
    End Sub
  7. 通过以下方式添加其他字段 "name"、"email"、"homepage":
    addTextElement(xdoc, elem, "name", TextBoxName.Text)
    addTextElement(xdoc, elem, "email", TextBoxEMail.Text)
    addTextElement(xdoc, elem, "homepage", TextBoxHomepageTitle.Text)
  8. 主页元素将存储 URL 作为其属性,因此我们添加以下代码,使其成为主页 URL 的属性,并从访客录入表单的文本框中获取:
    Dim newatt As XmlAttribute
    newatt = xdoc.CreateAttribute("url")
    newatt.Value = TextBoxHomepageURL.Text
    elem.LastChild.Attributes.Append(newatt)
  9. 我们添加另外两个字段,即 "location" 和 "comment",方法如下:
    addTextElement(xdoc, elem, "location", TextBoxLocation.Text)
    addTextElement(xdoc, elem, "comment", TextBoxComments.Text)
  10. 接下来,通过组合日期和时间来添加日期字段:
    Dim strDate As String
    strDate = DateTime.Now.ToLongDateString() + " - " + _
              DateTime.Now.ToLongTimeString()
    addTextElement(xdoc, elem, "date", strDate)
  11. 最后,通过以下方式保存文档:
    xdoc.Save(Server.MapPath("guestbook.xml"))

查看 guestbook.xml 页面

我们首先需要创建一个 XSL 样式表,将 guestbook.xml 转换为 HTML 文件。以下简单、朴实的 gb.xsl 文件执行此转换。

<html xsl:version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      lang="en">
    <head>
        <title>GuestBook entries</title>
    </head>
    <body>
        <table border="1">
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Homepage</th>
                <th>Location</th>
           <th>Comment</th>
           <th>Date</th>
            </tr>
            <xsl:for-each select="guestbook/guest">
            <tr>
                   <td>
                        <em><xsl:value-of select="name"/></em>
                    </td>
                    <td>
                        <xsl:value-of select="email"/>
                    </td>
                    <td>
                        <xsl:value-of select="homepage"/>
                    </td>
                    <td>
                        <xsl:value-of select="location"/>
                    </td>
            <td>
               <xsl:value-of select="comment"/>
            </td>
            <td>
               <xsl:value-of select="date"/>
            </td>
           </tr>
       </xsl:for-each>
        </table>
    </body>
</html>

我们添加一个 view.aspx 页面,并在其中从工具箱拖放一个 XML 控件。右键单击 XML 控件并将两个属性设置为如下:

  • DocumentSource-> guestbook.xml
  • TransformSource-> gb.xsl

注意:您需要为 guestbook.xml 文件提供写入权限,否则将引发错误。应根据需要添加错误处理和验证。

最后,当您打开 view.aspx 页面时,您将看到以下内容:

© . All rights reserved.