Гостевая книга на ASP.NET

Приложение ASP.NET, написанное от начала и до конца, представляет собой гостевую книгу.
Скачать исходники – 22 кб


Ввведение

Этот проект дает возможность посетителям оставлять сообщения в гостевой книге на сайте. Проект состоит из двух частей:

  • Создание сообщений.
  • Просмотр гостевой книги.

База данных

Гостевая книга будет сохраняться в 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 icon wink Гостевая книга на ASP.NET </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);

    addTextElement( xmldoc, elem, "name", TextBoxName.Text );

    addTextElement( xmldoc, elem, "email", TextBoxEMail.Text );

    addTextElement( xmldoc, elem, "homepage", TextBoxHomepageTitle.Text );

    XmlAttribute newAttr = xmldoc.CreateAttribute("url");

    newAttr.Value = TextBoxHomepageURL.Text;

    elem.LastChild.Attributes.Append( newAttr );

    

    addTextElement( xmldoc, elem, "location", TextBoxLocation.Text );

    addTextElement( xmldoc, elem, "comment", TextBoxComments.Text );

    //Записать дату

    string strDate = DateTime.Now.ToLongDateString() + 

                     " - " + 

                     DateTime.Now.ToLongTimeString(); 

    addTextElement( xmldoc, elem, "date", strDate );

    xmldoc.Save( Server.MapPath("guestbook.xml") );

    Response.Redirect("view.aspx");

}


Мы использовали метод addTextElement для построения нового сообщения пользователя в базе данных:

private void addTextElement( XmlDocument doc, XmlElement nodeParent, 

                             string strTag, string strValue )

{

    XmlElement nodeElem = doc.CreateElement( strTag );

    XmlText nodeText = doc.CreateTextNode( strValue );

    nodeParent.AppendChild( nodeElem );

    nodeElem.AppendChild( nodeText );

}



Просмотр

Для просмотра всех записей гостевой книги мы добавили еще одну 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;

    

    if (( nGuests % nGuestPerPage) != 0 )

        nPages = 1 + (nGuests / nGuestPerPage);

    else

        nPages = (nGuests / nGuestPerPage);

    LiteralGuests.Text += "Page(s) ";

    for (int n = 1; n <= nPages; n++)

    {

        LiteralGuests.Text += "<font face='verdana' size='2'>"

        LiteralGuests.Text += "<a href='/Guestbook/View.aspx?page=";

        LiteralGuests.Text += n.ToString();

        LiteralGuests.Text += "'>";

        LiteralGuests.Text += n.ToString();

        LiteralGuests.Text += "</a></font> ";

    }

    sr.Close();

}


Все преобразование из XML в HTML выполняются в файле guestbook.xslt. Это преобразование использует два параметра: lowerbound и upperbound, представляющие собой нижнее и верхнее значение индексов сообщений, соответствующие отображаемой странице гостевой книги.

Основное, что мы сделали – это цикл от lowerbound до upperbound и преобразование:

<xsl:for-each select="//guest[position() <= $upperbound and position() >= $lowerbound]">

    <xsl:apply-templates select="name"/>

</xsl:for-each>


Вот пример преобразования, используемого для отображения посетителя и его email, если не определен флаг private:

<xsl:template match="name">

    <xsl:choose>

        <xsl:when test="../@private='yes'">

            <font face="verdana" size="2">

                <b><xsl:value-of select='.' /></b>

            </font>

        </xsl:when>

        <xsl:otherwise>

            <font face="verdana" size="2">

                <b><a HREF="mailto:{../email}"><xsl:value-of select='.' ></a></b>

            </font>

        </xsl:otherwise>

    </xsl:choose>

</xsl:template>


Вы можете посмотреть файл guestbook.xslt для дальнейшей информации.

Заключение

Я хотел показать, что важно разделять данные от процессов их представления, и в этом очень помогает XML. Если вы хотите изменить представление гостевой книги, вам нужно только изменить файл guestbook.xslt.

Поделиться в соц. сетях

mailru Гостевая книга на ASP.NET
facebook Гостевая книга на ASP.NET
odnoklassniki Гостевая книга на ASP.NET
livejournal Гостевая книга на ASP.NET
googlebuzz Гостевая книга на ASP.NET

Также рекомендуем:

  1. Отказ в обслуживании в функции sys_timer_create() в ядре Linux Программа: Linux kernel 2.6.x Опасность: Низкая Наличие эксплоита: Да . Описание: Уязвимость позволяет локальному пользователю вызвать отказ в обслуживании системы. Уязвимость существует в функции sys_timer_create() в файле Linux/kernel/posix-timers.c. Локальный пользователь может потребить всю доступную память на системе и вызвать отказ в обслуживании. URL производителя: http://kernel.org Решение: Способов устранения уязвимости не существует в настоящее время....
  2. Гайд о поисковой оптимизации Быть может весь арсенал способов, которым я пользуюсь сегодня, завтра перестанет работать, но общие принципы поисковой оптимизации останутся. Поисковые системы (Яндекс, Google, Рамблер, MSN, Yahoo) также будут стараться обеспечить максимальное соответствие выдачи запросу (релеватность выдачи), а поисковые оптимизаторы продвинуть свои сайты как можно выше в этой самой выдаче. Первый раз я пришел в SEO (в [...]...
  3. GlassBox Описание Недавно обнаружили весьма интересную javascript библиотеку Glassbox.С ее помощью можно создавать прозрачные рамки, цветные полупрозрачные слои и различные визуальные эффекты, такие как плавное появление и исчезновение слоев.. Эта библиотека весьма компактна и включает в себя библиотеки Prototype и Script.aculo.us. К основным плюсам библиотеки можно отнести: * Легкость использования; * Кроссбраузерность (Работает в IE6+ , [...]...
  4. GUI в Java c помощью JFace: Создание окна приложения JFace – это доплнительный слой абстракции над графической библиотекой SWT, предоставляющий возможности для разработки графического интерфейса приложения на основе модели MVC(Model View Controller). Основные компоненты JFace включают: Viewers – классы для инкапсуляции задач предоставления данных для отображения, их фильтрации, сортировки и т.п. Actions and contributions – вводят семантику описания пользовательских действий и того, как они [...]...
  5. MySQL – это просто! Сначала ответим на вопрос – что такое MySQL? Это База Данных (БД), в которой структурировано хранятся данные. Следует второй вопрос – зачем отказываться от простых и удобных файлов к сложной БД? Потому что файлы, генерируемые каким либо скриптом на основе файловой БД (гостевые книги, CMS, форумы), постепенно начинают увеличиваться в размере, а так же их [...]...
  6. Софт для вебмастера Как вы знаете, для создания вебстраниц, все вебмастера пользуются программами. А вот какими лучше всего пользоваться мы сейчас и разберем.. 1. Html-редакторы Macromedia HomeSite – весьма популярный html-редактор. Первое что бросается в глаза – это подсветка. Подсветка кода у него просто ужасная, т.к. в ней используются яркие цвета зеленого, синего, красного. Радует то, что цвета [...]...
  7. Что такое XML Sapiens Что такое XML Sapiens 1995 году компания Vignette представила на рынке первую коммерческую систему класса CMS (систем управления контентом). С тех пор число коммерческих CMS неустанно растет и ныне сам термин CMS прижился на рынке и, как правило, не требует расшифровки. За последние годы было утверждено множество отрытых стандартов, позволяющих структурировать информацию на сайтах, отделить [...]...
  8. Пример создания многоязыкового приложения (XML) Введение Вопрос разработки многоязычного web – приложения (сайта) или приложения с поддержкой интерфейса пользователя на разных языках, поднимается довольно часто. Если еще пару лет назад данная задача была не так актуальна, то сейчас подобная функциональность де – факто стала одним из требований заказчика при создании web – ориентированного приложения.. Формулировка задачи Целью данной работы является [...]...
  9. Использование шаблонов при программировании WEB-приложений ЗАЧЕМ ВООБЩЕ ИСПОЛЬЗОВАТЬ ШАБЛОНЫ? Может, кто-то скажет, а зачем выносить HTML код в отдельный файл если его можно спокойно писать в скрипте? Да конечно в скрипте можно писать HTML код, но просмотреть полностью «собранную», или частично «собранную» страницу которую выводит скрипт, возможно только при его нормальной работе, а во время отладки скрипта, как правило, возникают [...]...
  10. tmp профессиональный дизайн; регистрация домена .RU на 1 год; наполнение до 10 страниц сайта; блок новостей; прайс-лист; форма заказа с сайта; регистрация в поисковых системах; счетчик посещений; срок изготовления 3-5 дней. акция 3990=...
  11. Множественные уязвимости в Microsoft Internet Explorer Программа: Microsoft Internet Explorer 5.01, 5.5, 6.0 Опасность: Высокая Наличие эксплоита: Да . Описание: Обнаруженные уязвимости позволяют удаленному пользователю произвести XSS нападение, фишинг-атаки и выполнить произвольный код на целевой системе. 1. Уязвимость существует в механизме междоменного перенаправления при обработке некоторых динамических объектов. Удаленный пользователь может посредством JavaScript URI обработчика, примененного к динамически созданному тегу “object”, [...]...
  12. АJAX. Не повторяйте ошибок AJAX (Asynchronous JavaScripting and XML) стремительно притягивает интерес веб-разработчиков к использованию определенного инструментария – конкретного набора технологий, с помощью которого (по мнению большинства) закладывается новый этап развития веб-приложений. Этот набор включает в себя (X)HTML, CSS, DOM, JavaScript, XML, XSLT, XMLHttpRequest и как альтернативу к XML/XSLT возможно использовать JSON и JSON-RPC.. AJAX устраняет необходимость перезагрузки веб-страницы [...]...
  13. Подсвечивание кода с помощью jQuery и Chili В этом руководстве мы научимся подсвечивать исходный код с помощью плагина Chili для jQuery. Мы узнаем, как видоизменять Chili для повышения читаемости и удобства использования подсветки в собственных функциях.. [Демо] [Исходный код] Введение В первом руководстве вы узнаете, как подсвечивать исходный код с помощью плагина jQuery Chili. И это не очередная быстрая справка по Chili: [...]...
  14. Подсвечивание кода с помощью jQuery и Chili В этом руководстве мы научимся подсвечивать исходный код с помощью плагина Chili для jQuery. Мы узнаем, как видоизменять Chili для повышения читаемости и удобства использования подсветки в собственных функциях.. [Демо] [Исходный код] Введение В первом руководстве вы узнаете, как подсвечивать исходный код с помощью плагина jQuery Chili. И это не очередная быстрая справка по Chili: [...]...
  15. Всплывающее меню для одностраничного портала Введение Недавно решил изучить ASP.NET и одновременно создать что-нибудь полезное, посложнее «Hello, world!». Первое знакомство с ASP.NET у меня началось с IBuySpy. Довольно быстро разобравшись с этим Shared Source проектом, я начал его перекраивать под свои нужды. В итоге осталось довольно мало оригинального кода, кроме части ядра (ибо, зачем изобретать велосипед? ). Кроме всего прочего, [...]...

Комментарии запрещены.