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.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER,XMLNODETYPE.ELEMENT,"COMMENTS","","") ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"COMMENTS","","") ; NAVIGATOR.VALUE=COMMENTS.VALUE ; NAVIGATOR.MOVETOPARENT() ;
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">&NBSP;</TD> </TR> <TR CLASS="NEWSBODY" > <TD>NAME :</TD> <TD ><ASP:TEXTBOX TEXT="" ID="NAME" RUNAT="SERVER" />&NBSP;&NBSP;&NBSP; <FONT COLOR=#FF0000>*</FONT></TD> </TR> <TR CLASS="NEWSBODY"> <TD>COUNTRY :</TD> <TD><ASP:TEXTBOX TEXT="" ID="COUNTRY" RUNAT="SERVER"/>&NBSP;&NBSP;&NBSP; <FONT COLOR=#FF0000>*</FONT></TD> </TR> <TR CLASS="NEWSBODY"> <TD>E-MAIL :</TD> <TD><ASP:TEXTBOX TEST="" ID="EMAIL" RUNAT="SERVER"/>&NBSP;&NBSP;&NBSP; <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">
<TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "NAME") %> </TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "COUNTRY") %> </TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "EMAIL") %> </TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "COMMENTS") %> </TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "DATETIME") %> </TD> </TR>
</TEMPLATE>
<TEMPLATE NAME="FOOTERTEMPLATE">
</TABLE>
</TEMPLATE>
</ASP:REPEATER>
<!-- #INCLUDE FILE="FOOTER.INC" --> </BODY> </HTML>
SAURABH NANDU
|