Этот проект дает возможность посетителям оставлять сообщения в гостевой книге на сайте. Проект состоит из двух частей:
Создание сообщений.
Просмотр гостевой книги.
База данных
Гостевая книга будет сохраняться в XML-файле guestbook.xml на сервере. Кодировка XML-файла изменена на ISO-8859-1, чтобы можно было обрабатывать специальные символы. Вот структура XML-файла:
<?xml version="1.0" encoding="ISO-8859-1" ?> <guestbook> <guest private="yes"> <name>Laurent Kemp?t;/name> <homepage url="http://perso.wanadoo.fr/laurent.kempe/">Tech Head</homepage> <location>Illzach, France</location> <comment>First to sign the guestbook ;)</comment> <date>Thursday, May 30, 2002 - 10:29 AM</date> </guest> </guestbook>
Вам будет предложено ввести следующую информацию:
Имя
E-Mail
Название домашней страницы
URL домашней страницы
Адрес
Комментарии
PRIVATE - Я хочу, чтобы только владелец сайта видел мой email
Приложение
Для того, чтобы иметь возможность легко изменять метод отображения гостевой книги, требуется разделить код и данные. Для выполнения этого требования я выбрал использование XSLT-преобразования XML-файла; при этом пользователям возвращается HTML-файл.
Создание сообщений
Страница, которая позволяет пользователям оставлять сообщения в гостевой книге, содержится в Web-форме Sign.aspx. Эта страница требует от пользователя заполнить некоторые поля (textboxes) инфомацией, которая будет отображаться в гостевой книге. Чтобы проверять введенную информацию, мы используем RequiredFieldValidator. Кроме того, мы также используем RegularExpressionValidator для проверки адреса Email.
Когда посетитель заполнил все поля, он нажимает кнопку продолжения, и страница возвращает событие, перехватываемое методом ButtonContinue_Click. Этот метод загружает базу данных XML, получает информацию, введенную пользователем, и добавляет ее в начало XML-файла. Затем новая база данных сохраняется на диске сервера и пользователь перенаправляется на страницу просмотра.
private void ButtonContinue_Click(object sender, System.EventArgs e) { //Загрузить базу данных гостевой книги XmlDocument xmldoc = new XmlDocument(); xmldoc.Load( Server.MapPath("guestbook.xml") );
//Получить статус private string strPrivate; if ( CheckBoxPrivate.Checked ) strPrivate = "yes"; else strPrivate = "no";
//Создать новый элемент XmlElement elem = xmldoc.CreateElement("guest"); elem.SetAttribute("private", strPrivate);
//Добавить новое сообщение в первый узел xmldoc.DocumentElement.PrependChild(elem);
Для просмотра всех записей гостевой книги мы добавили еще одну Web-форму View.aspx в проект. В методе Page_Load мы загрузили базу данных XML и XSLT-файл. Мы выполнили преобразование и вывели результат в элемента управления Literal Web Form.
private void Page_Load(object sender, System.EventArgs e) { //Загрузить базу данных гостевой книги из xml-файла XmlDocument doc = new XmlDocument( ); doc.Load( Server.MapPath("guestbook.xml") );
//Получить номер запрошенной страницы string strPageAsked = Request.QueryString["page"];
//Если страница не определена, использовать первую if ( strPageAsked == null ) { strPageAsked = "1"; }
int nGuestPerPage = 5; int nGuests = doc.ChildNodes[1].ChildNodes.Count;
int nPageAsked = System.Convert.ToInt32(strPageAsked);
int lowerbound = 1 + ( nPageAsked - 1 ) * nGuestPerPage; int upperbound = lowerbound + nGuestPerPage - 1;
//Выполнить XSLT-преобразование XslTransform xslt = new XslTransform(); xslt.Load( Server.MapPath("guestbook.xslt") );
//Построить список параметров XLST XsltArgumentList xsltArgs = new XsltArgumentList(); xsltArgs.AddParam("lowerbound", "", lowerbound.ToString()); xsltArgs.AddParam("upperbound", "", upperbound.ToString());
//Преобразовать XML в HTML MemoryStream ms = new MemoryStream(); xslt.Transform( doc, xsltArgs, ms ); ms.Seek( 0, SeekOrigin.Begin );
StreamReader sr = new StreamReader(ms);
//Вставить результаты в страницу View.aspx LiteralGuests.Text = sr.ReadToEnd();
//Вставить навигатор страниц внизу страницы int nPages = 0;
Все преобразование из XML в HTML выполняются в файле guestbook.xslt. Это преобразование использует два параметра: lowerbound и upperbound, представляющие собой нижнее и верхнее значение индексов сообщений, соответствующие отображаемой странице гостевой книги. Основное, что мы сделали - это цикл от lowerbound до upperbound и преобразование:
Вы можете посмотреть файл guestbook.xslt для дальнейшей информации.
Заключение
Я хотел показать, что важно разделять данные от процессов их представления, и в этом очень помогает XML. Если вы хотите изменить представление гостевой книги, вам нужно только изменить файл guestbook.xslt.