ASP.NET: XML留言版第二版
 
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