Code: 1) guestpost.aspx :- The Guestbook post page
<%@ Import Namespace="System" %> <%@ Page Language="C#" EnablesessionState="False" Debug="True" %> <%@ Import Namespace="System.IO" %> <%@ Assembly Name="System.xml" %> <%@ Import Namespace="System.Xml" %> <%-- These are the imported assemblies and namespaces need to run the guest book --%> <html> <head> <title>Welcome to Saurabh's GuestBook.</title> <script Language="C#" runat="server"> //This method is called when the submit button is clicked public void Submit_Click(Object sender, EventArgs e) { //the path to the Xml file which will contain all the data //modify this if you have any other file or directory mappings. //modify this if you have been directed here from Step 2 of the ReadMe file. string datafile = "db/guest.xml" ; //put the posting code within a Try-Catch block try { //PRoceed only if all the required feilds are filled-in if(Page.IsValid&&Name.Text!=""&&Country.Text!=""&&Email.Text!=""){ errmess.Text="" ; //make an instance of the class XmlDocument XmlDocument xmldocument = new XmlDocument() ; //load the xml file you will use as your database. //Since we are working on a server we have to use 'Server.MapPath()' //to map the path to the database file //Also Open a FileStream to the Database //Keep "FileShare.ReadWrite" mode to enable sharing FileStream fin ; fin = new FileStream(Server.MapPath(datafile), FileMode.Open, Fileaccess.Read, FileShare.ReadWrite) ; xmldocument.Load(new StreamReader(fin)) ; fin.Close(); //make an instance of DocumentNavigator class which will help us to //navigate in the loaded XML data file. DocumentNavigator navigator = new DocumentNavigator(xmldocument) ;
//below code is very significant as it navigates through the XML document and //stores the required values (ps: read this code carefully) //first move to the xml documents elements //(in my xml file this will be the 'Guests' Node) navigator.MoveToDocumentElement() ; //then insert First element (FirstChild) which will contain all the information // of a single guest posting navigator.Insert(TreePosition.FirstChild, XmlNodeType.Element, "Guest","","") ; //Insert the Element of Name as the First node of 'Guest' navigator.Insert(TreePosition.FirstChild, XmlNodeType.Element, "Name","","") ; //This is important to specify what kind of Value will the Name element contain navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"Name","","") ; //assign the Name element the Value from the .Text property of the TextBox navigator.Value=Name.Text ; //Go back to the Parent Node ie 'Guest' navigator.MoveToParent() ; //Insert another Element 'Country' After the FirstChild ie. after the 'Name' node. navigator.Insert(TreePosition.After, XmlNodeType.Element,"Country","","") ; navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"Country","","") ; navigator.Value=Country.Text ; navigator.MoveToParent() ; navigator.Insert(TreePosition.After,XmlNodeType.Element,"Email","","") ; navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"Email","","") ; navigator.Value=Email.Text;
navigator.Insert(TreePosition.After, XmlNodeType.Element,"DateTime","","") ; navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"DateTime","","") ; //set the Date time stamp of the entry DateTime now = DateTime.Now ; navigator.Value=now.ToShortDateString()+" "+now.ToShortTimeString() ;
//Create a stream to save the file FileStream fout ; fout = new FileStream(Server.MapPath(datafile), FileMode.Open, FileAccess.Write, FileShare.ReadWrite) ; //after making the necessary changes we Save the changes to the Xml Document xmldocument.Save(new StreamWriter(fout)) ; //free up the XML file from the Document file so that other programs can use it xmldocument=null ; fout.Close(); //Build a custom query sending the data posted to another page for display //since it is a query we have to encode it in UTF8 format String QueryString="Name=" +System.Web.HttpUtility.UrlEncodeToString(Name.Text,System.Text.Encoding.UTF8); QueryString+="&&Country=" +System.Web.HttpUtility.UrlEncodeToString(Country.Text,System.Text.Encoding.UTF8); QueryString+="&&Email=" +System.Web.HttpUtility.UrlEncodeToString(Email.Text,System.Text.Encoding.UTF8); QueryString+="&&Comments=" +System.Web.HttpUtility.UrlEncodeToString(Comments.Value,System.Text.Encoding.UTF8);
//go to the page viewpost.aspx and append the query string at its end. Page.Navigate("viewPost.aspx?" + QueryString);
} else { //if any of the Fields are kept empty show an error message errmess.Text="Fill in all the required fields of the Guestbook." ; } } catch (Exception edd) { //catch any other exception that occur errmess.Text="Cannot write to XML file because "+edd.ToString() ; } } </script> <LINK href="mystyle.CSS" type=text/css rel=stylesheet> </head> <body topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0"> <%-- Include a header file 'header.inc' --%> <!-- #Include File="header.inc" --> <br> <h3 align="center" class="newsbody">Guestbook Post Page.</h3> <br> <asp:label id="errmess" text="" style="color:#FF0000" runat="server" /> <form runat="server"> <table border="0" width="80%" align="Center"> <tr > <td class="newsheading"><b>Sign-in My GuestBook</b></td> <td class="newsheading"> </td> </tr> <tr class="newsbody" > <td>Name :</td> <td ><asp:textbox text="" id="Name" runat="server" /> <font color=#FF0000>*</font></td> </tr> <tr class="newsbody"> <td>Country :</td> <td><asp:textbox text="" id="Country" runat="server"/> <font color=#FF0000>*</font></td> </tr> <tr class="newsbody"> <td>E-Mail :</td> <td><asp:textbox test="" id="Email" runat="server"/> <font color=#FF0000>*</font></td> </tr> <tr class="newsbody"> <td>Comments :</td> <td><textarea id="Comments" cols="25" rows="4" runat="server" /></td> </tr> <tr class="newsbody"> <td colspan="2" > <asp:Button class="newsheading" Text="Submit" onClick="Submit_Click" runat="server"/> </td> </tr> </table> </form> <br> <h4 class="newsbody"><a href="viewguestbook.aspx">Click here </a> to view GuestBook.</h4> <br> <!-- #Include File="footer.inc" --> </body> /html>
2) viewpost.aspx : The post conformation page.
<%@ Import Namespace="System" %> <%@ Page Language="C#" Debug="true" %> <html> <head> <title>Welcome to Saurabh's GuestBook.</title> <script language="C#" runat="server" > //execute this script when the page loads void Page_Load(Object Src, EventArgs E) { //if the page is called from another page if (!Page.IsPostBack) { //get the different Parameters from the query string and store it //to respective Labels NameLabel.Text = Request.Params["Name"]; CountryLabel.Text= Request.Params["Country"] ; EmailLabel.Text=Request.Params["Email"]; CommentsLabel.Text=Request.Params["Comments"] ; } if(Page.IsPostBack) { //else display an error errmess.Text="This Page Cannot be called directly. " ; } } </script> <LINK href="mystyle.css" type=text/css rel=stylesheet> </head> <body topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0"> <!-- #Include File="header.inc" --> <asp:label id="errmess" text="" style="color:#FF0000" runat="server" /> <center> <h2 class="newsbody"><b>Thank You , for posting in My GuestBook.</b></h2> <table align=center width="60%" border="0" cellspacing="2" cellpadding="1" > <tr class="titheading"><td colspan="2">The information You Posted!</td></tr> <tr class="newsbody"> <td>Name :</td> <td><asp:label id="NameLabel" text="" runat="server" /></td> </tr> <tr class="newsbody"> <td>Country :</td> <td><asp:label id="CountryLabel" text="" runat="server" /></td> </tr> <tr class="newsbody"> <td>E-mail :</td> <td><asp:label id="EmailLabel" text="" runat="server"/></td> </tr> <tr class="newsbody"> <td>Comments :</td> <td><asp:label id="CommentsLabel" text="" runat="server" /></td> </tr> </table> <br> <h4 class="newsbody"><a href="viewguestbook.aspx">Click here </a> to view GuestBook.</h4> <br> </center> <!-- #Include File="footer.inc" --> </body> </html>
2) viewguestbook.aspx : The Guestbook viewing page.
<%@ Import Namespace="System" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Data" %> <%@ Assembly Name="System.Xml" %> <%@ Import Namespace="System.Xml" %> <%@ Page Language="C#" %> <%-- Needed Assembiles --%> <html> <head> <title>Welcome to Saurabh's GuestBook.</title> <script language="C#" runat=server> //run the script when the Page is Loaded public void Page_Load(Object sender, EventArgs e) { //the path to the Xml file which will contain all the data //modify this if you have any other file or directory mappings. //modify this if you have been directed here from Step 2 of the ReadMe file. string datafile = "db/guest.xml" ; //try-Catch block to read from an XML file try { //make an instance to the XMLDataDocument class //this class can read from an xml file in and ordered format XmlDataDocument datadoc = new XmlDataDocument(); //Open a FileStream to the Database FileStream fin ; fin = new FileStream(Server.MapPath(datafile),FileMode.Open, FileAccess.Read,FileShare.ReadWrite) ; // Infer the DataSet schema from the XML data and load the XML Data datadoc.DataSet.ReadXml(new StreamReader(fin)); //Databind the first table in the Dataset to the Repeater MyDataList.DataSource = datadoc.DataSet.Tables[0].DefaultView; MyDataList.DataBind();
//free up the XML file to be used by other programs datadoc=null;
} catch (Exception edd) { //catch any other exceptions that occur errmess.Text="Cannot read from XML file because "+edd.ToString() ; } } </script> <LINK href="mystyle.css" type=text/css rel=stylesheet> </head> <body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" rightmargin="0"> <!-- #Include File="header.inc" --> <asp:label id="errmess" text="" style="color:#FF0000" runat="server" /> <br> <h3 align="center" class="newsbody">My Guestbook.</h3> <ASP:Repeater id="MyDataList" runat="server"> <template name="headertemplate"> <table class="mainheads" width="100%" style="font: 8pt verdana"> <tr style="background-color:#FF9966"> <th> Name </th> <th> Country </th> <th> Email </th> <th> Comments </th> <th> Date/Time </th> </tr> </template> <template name="itemtemplate">