| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: .NET Framework :: Учебник по ASP.NET :: Гостевая книга на ASP.NET
Гостевая книга на ASP.NETОригинал Guestbook for ASP.NET, перевод от kpumuk специально для Realcoding.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>
Вам будет предложено ввести следующую информацию:
ПриложениеДля того, чтобы иметь возможность легко изменять метод отображения гостевой книги, требуется разделить код и данные. Для выполнения этого требования я выбрал использование XSLT-преобразования XML-файла; при этом пользователям возвращается HTML-файл. Создание сообщенийСтраница, которая позволяет пользователям оставлять сообщения в гостевой
книге, содержится в 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 );
}
ПросмотрДля просмотра всех записей гостевой книги мы добавили еще одну 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. Рубрика: Учебник по ASP.NET
Инструменты Internet Explorer 8 Beta 2 для разработчиков.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 05.09.2008
Google Developer Day 2008 в Москве.
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 05.09.2008
ТОП 10 самых раздражающих факторов для программиста.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…
Подробнее... |
Рубрика: Разное
| Добавлено: 03.09.2008
Остальные статьи:
Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|