[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / ASP.NET /

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

Ввведение


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

·                                 Создание сообщений.

·                                 Просмотр гостевой книги.

База данных


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

    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.





Комментарии

qrtfwmhjxy
21-12-2011   
zyvfF0 , [url=http://sivfdalpzujv.com/]sivfdalpzujv[/url], [link=http://pknjetcfjskn.com/]pknjetcfjskn[/link], http://bfqfbnpsxlnk.com/

hezbuxmlo
21-12-2011   
mbwv2G <a href="http://vlsrxyccieqc.com/">vlsrxyccieqc</a>

gokupjgxc
19-12-2011   
p4puRd , [url=http://zpkvzhphenlp.com/]zpkvzhphenlp[/url], [link=http://xznxiwwlfapq.com/]xznxiwwlfapq[/link], http://ymeqsoajggor.com/

lqytqhv
19-12-2011   
dZSiQH <a href="http://xwbpoayyzghx.com/">xwbpoayyzghx</a>

Spike
18-12-2011   
I love these articles. How many words can a wordsimth smith?

Игнат
29-10-2011   
http://www.winforms.ru/ASPNET.aspx?f=4102011202857
Отличный курс на данную тему

Вася
13-12-2010   
Очень мало информации, непонятно что и где писать, такая статья на многих сайтах, но толку от неё мало.

PHP
22-10-2009   
Не могу сделать, выложите исходник

Артур
20-07-2009   
На конец решил проблему с гостевой книгой благодаря данной статье. Советую всем!

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / ASP.NET /

Как свзязать DropDownList с источником данных и добавить первым значением текстовое значение
23-03-2010   

Делается это просто, кидаем на форму DropDownList и SqlDataSource. Для SqlDataSource - указываем строку подключения к базе данных и запрос, который будет выбирать данные. В DropDownList указываем какой DataSource использовать (DataSourceID=SqlDataSource1), а также настраиваем что будет отображаться (DataTextField=name), а что будет в качестве значения DataValueField=id. Вот в общем то и все... подробнее

Кол. просмотров: общее - 170756 сегодня - 1

Как добавить собственный параметр в web.config и считать его
23-03-2010   

Файл web.config используется для хранения глобальных параметров web-приложения. В файле web.config удобно хранить настройки для веб-приложения, ну хоть бы и параметры подключения к базе данных. В общем виде параметр добавляется так... подробнее

Кол. просмотров: общее - 88237 сегодня - 2

Загрузка файла на сервер ASP .NET
23-03-2010   

Сегодня попробуем смастерить форму для загрузки файла на сервер с помощью технологии ASP .NET Итак, моздаем новый сайт в Visual Studio 2005 с сразу в папке проекта создаем папку files в которую будут попадать загруженные файлы... подробнее

Кол. просмотров: общее - 8229 сегодня - 0

Выборка данных из MSSQL и отображение их на странице ASPX
23-03-2010   

Сейчас мы рассмотрим задачу выборки данных из таблицы с помощью обычных запросов, а также с помощью хранимых процедур... подробнее

Кол. просмотров: общее - 5808 сегодня - 0

Include в ASP .NET
23-03-2010   

Думаю многие хотя бы раз задавались вопросом: есть ли в ASP .NET include (инклуд) файлов, как например в PHP и SSI. Конечно в ASP .NET есть свои примочки такие как MasterPage и UserControls. Но все таки можно ли include?? :) Можно... подробнее

Кол. просмотров: общее - 6312 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects