ASP.NET 访客录入表单






1.88/5 (4投票s)
2004 年 8 月 9 日
3分钟阅读

106687

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>
访客录入页面背后的代码(带注释)
单击提交按钮时,将按顺序执行以下代码
- 将加载
XMLDocument
'Guestbook.xml'。Dim xdoc As New XmlDocument xdoc.Load(Server.MapPath("guestbook.xml"))
- 将检索复选框条目并将其设置为文本值。
Dim prev As String If (CheckBoxPrivate.Checked) Then prev = "yes" Else prev = "no" End If
- 声明并定义一个新的文档元素,如接下来的代码所示,名为 "
private
" 的复选框是 "guest" [根] 元素的属性。Dim elem As XmlElement elem = xdoc.CreateElement("guest") elem.SetAttribute("private", prev)
- 通过以下方式将一个新的 'Guest' 添加到此文件的开头:
xdoc.DocumentElement.PrependChild(elem)
- 要添加其他条目,将使用
addTextElement
函数,该函数接收:- 作为常量的
XmlDocument
, - 作为常量的元素,
- 元素的名称,以及
- 从表单中检索它的位置。
- 作为常量的
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
- 通过以下方式添加其他字段 "
name
"、"email
"、"homepage
":addTextElement(xdoc, elem, "name", TextBoxName.Text) addTextElement(xdoc, elem, "email", TextBoxEMail.Text) addTextElement(xdoc, elem, "homepage", TextBoxHomepageTitle.Text)
- 主页元素将存储 URL 作为其属性,因此我们添加以下代码,使其成为主页 URL 的属性,并从访客录入表单的文本框中获取:
Dim newatt As XmlAttribute newatt = xdoc.CreateAttribute("url") newatt.Value = TextBoxHomepageURL.Text elem.LastChild.Attributes.Append(newatt)
- 我们添加另外两个字段,即 "
location
" 和 "comment
",方法如下:addTextElement(xdoc, elem, "location", TextBoxLocation.Text) addTextElement(xdoc, elem, "comment", TextBoxComments.Text)
- 接下来,通过组合日期和时间来添加日期字段:
Dim strDate As String strDate = DateTime.Now.ToLongDateString() + " - " + _ DateTime.Now.ToLongTimeString() addTextElement(xdoc, elem, "date", strDate)
- 最后,通过以下方式保存文档:
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.xmlTransformSource
-> gb.xsl
注意:您需要为 guestbook.xml 文件提供写入权限,否则将引发错误。应根据需要添加错误处理和验证。
最后,当您打开 view.aspx 页面时,您将看到以下内容: