|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Книги: [Классика] [Базы данных] [Internet/WWW] [Сети] [Программирование] [UNIX] [Windows] [Безопасность] [Графика] [Software Engineering] [ERP-системы] [Hardware]
Отрывок
Глава 11
Виртуальная риэлтерская контораВ сети Internet потенциальные покупатели могут получить исчерпывающие описания домов, выставленных на продажу. Подобная информация публикуется на Web-узлах агентств недвижимости, в электронных специализированных газетах, а также на тематических Web-страницах. Посетители осуществляют поиск подходящего варианта, указывая такие данные, как количество спален, общая площадь жилья и цена. Возможно, клиент пожелает пролистать весь список предлагаемого жилья. В этой главе мы рассмотрим несколько страниц, на которых посетителю предоставляется возможность осуществлять поиск подходящего варианта, просматривать списки предложений и знакомиться с подробными описаниями жилья. Описание проекта Перед изучением кода ознакомимся с описанием готового Web-узла. Когда посетитель впервые попадает на узел, он видит страницу, изображенную на рис. 11.1. ![]() Рис. 11.1. Домашняя страница риэлтерского узла Домашняя страница содержит ссылку на страницу Поиск (рис. 11.2). ![]() Рис. 11.2. Страница Поиск, фильтрация не задана На странице поиска посетитель указывает параметры домов, которые представляют для него интерес и с описаниями которых он хотел бы ознакомиться. К числу таких параметров относятся предельная цена, количество ванных комнат и спален, район города и т. д. Пункты в списке могут быть отсортированы различными способами, критерий сортировки указывается в поле Сортировать по. Если посетитель решает не ограничивать область поиска, на странице Результаты поиска выводятся все описания из каталога домов (рис. 11.3). ![]() Рис. 11.3. Результаты поиска, полученные без использования фильтра В заголовке таблицы указывается число записей, соответствующих запросу пользователя. Строки таблицы содержат базовые сведения о каждом доме. Как отобразить полное описание, вы узнаете позже. Теперь рассмотрим ситуацию, когда посетитель задает критерии поиска (рис. 11.4). Итак, требуется, чтобы цена дома лежала в диапазоне от $100000 до $300000, а дом, в котором имеется, по крайней мере, две ванные комнаты и три спальни, располагался в районе Теремки. В результате выполнения щелчка на кнопке ОК на экран выводится набор записей, соответствующих заданным условиям (рис. 11.5). ![]() Рис. 11.4. Страница Поиск с установленным фильтром ![]() Рис. 11.5. Страница Результаты поиска с установленным фильтром Как показано на рисунке, критериям поиска соответствуют пять записей из восьми. Обратите внимание на то, что записи при выводе на экран сортируются по цене дома. Столбец номера содержит ссылки, предназначенные для перехода к полным описаниям домов (рис. 11.6). ![]() Рис. 11.6. Страница Дом В верхней части страницы Дом находится код HLCN (Home Listing Catalog Number - номер описания дома в каталоге). Этот номер необходим для того, чтобы со стартовой страницы можно было сразу загрузить нужное описание. Посетители вводят номер в специальное текстовое поле (элемент управления TextBox). В данном случае посетитель ввел неправильный код (рис. 11.7). Далее, при рассмотрении кода страницы, мы увидим, что в качестве кода HLCN необходимо ввести шестизначное число и нажать кнопку ОК для подтверждения. ![]() Рис. 11.7. Страница с некорректным кодом HLCN Когда посетитель возвращается на страницу Дом, его вниманию предлагается вся существующая информация о продаваемой недвижимости (даже изображения дома). На рис. 11.6. вы видите два изображения дома, а на рис. 11.8 - четыре. Описание может быть снабжено любым количеством изображений или не содержать их вообще. Элемент управления DataList позволяет выводить на экран изображения по четыре в ряд. ![]() Рис. 11.8. Страница Дом с четырьмя изображениями дома База данных проекта C11.sql База данных, необходимая для функционирования узла Недвижимость, состоит из двух таблиц. Связи между этими таблицами схематически показаны на рис. 11.9. ![]() Рис. 11.9. Связи между таблицами базы данных узла Недвижимость Таблица Listings является основной таблицей в базе данных. Она содержит всю текстовую информацию о доме. В таблице ListingPictures хранятся изображения зданий, представленных на узле Недвижимость. Две таблицы связаны отношением "один-ко-многим". Каждому описанию дома (одной записи в таблице Listings) может соответствовать несколько изображений (записей в таблице ListingPictures), но каждое изображение связано только с одним описанием. Таблица 11.1. Поля таблиц базы данных
Код проекта Web-узел Недвижимость состоит из четырех ASP.NET-страниц, на которых используется ряд элементов управления, в том числе DataGrid и Repeater. В этом разделе описаны способы применения элементов управления на узле Недвижимость, а также выполнен анализ кода, содержащегося на его четырех страницах. Домашняя страница Index.aspx Домашняя страница содержит средства, позволяющие посетителю переходить на страницу Поиск или непосредственно к описанию дома. Тело страницы содержит ASP.NET-тег Form, который задает обработку элементов управления на сервере: <Form runat="server"> Для отображения заголовка на странице используется элемент управления Label: <asp:Label Следующий элемент управления - TextBox: <asp:TextBox Этот элемент предназначен для ввода посетителем кода HLCN - шестизначного числа. Поскольку к формату значения предъявляются жесткие требования, с данным полем связан элемент управления RegularExpressionValidator: <asp:RegularExpressionValidator Он проверяет, является ли значение, введенное в поле txtHLCN: ControlToValidate="txtHLCN" шестизначным числом: ValidationExpression="^\d{6}$" Сообщение об ошибке отображается динамически, поэтому место для него на экране не выделяется заблаговременно: Display="Dynamic" В случае ввода неверного значения на экране появляется следующий текст: Номер в каталоге должен состоять из 6 цифр! На странице присутствует также элемент управления Button: <asp:button Процедура, заданная в параметре OnClick, должна выполняться при активизации кнопки: OnClick="SubmitBtn_Click" Итак, при нажатии кнопки OK запускается следующий код: Sub SubmitBtn_Click (Sender As Object, E As EventArgs) В ходе его выполнения посетитель перенаправляется на страницу Дом, куда передается введенный им номер HLCN: Response.Redirect ("./listing.aspx?HLCN="_ Страница Поиск Searsh.aspx Код страницы Поиск отображает элементы управления DropDownList, которые позволяют посетителю задавать различные критерии отбора описаний домов, а также определять параметры сортировки результативных данных. На основе выбранных значений формируется SQL-запрос к базе данных, который используется на странице Результаты поиска. Первый элемент управления на странице - Label - служит для отображения заголовка: <asp:Label Далее следует набор элементов управления DropDownList. Вот первый из них: <asp:DropDownList Список значений в элементе управления является фиксированным, то есть он не заполняется из базы данных. Обратите внимание на то, что первое значение списка выбирается по умолчанию. В этом списке посетитель указывает минимальное значение стоимости дома. Следующий элемент управления предназначен для задания максимальной стоимости: <asp:DropDownList Еще один элемент управления DropDownList служит для указания минимального количества ванных комнат: <ASP:DropDownList Значения, заданные посетителем, будут использоваться для формирования SQL-запроса, который выбирает из базы данных записи, соответствующие критериям. Так, если посетитель выбрал количество ванных комнат "Не менее 1", то в SQL-запрос включается следующее предложение Where: BathRooms >=1 С помощью приведенного ниже элемента DropDownList определяется желаемое количество спален: <ASP:DropDownList Представляет интерес следующий факт. Значение, выбранное по умолчанию в любом элементе управления DropDownList, не задает никаких ограничений. Следовательно, если посетитель не выполнит никаких изменений в полях, он увидит все описания домов. Очередной элемент DropDownList предназначен для выбора района: <ASP:DropDownList Последний элемент управления DropDownList позволяет задать способ сортировки полученных описаний: <ASP:DropDownList Значение, выбранное посетителем, будет использоваться в предложении Order By запроса SQL. Цепочку элементов управления на странице завершает элемент Button, активизация которого служит указанием начать обработку формы: <asp:button Когда кнопка OK нажата, происходит запуск следующей процедуры: Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Процедура формирует и сохраняет в переменной сеанса запрос SQL, который основан на параметрах, заданных посетителем. Следует отметить, что значения полей Bedrooms и Bathrooms возвращаются как единое целое с символом "/" в качестве разделителя, что определяет их вид на странице результатов поиска. Контактные данные также возвращаются как единое значение, в котором элементы разделяются HTML-тегом Данные, выбранные посетителем в элементах управления DropDownList, используются в предложении Where запроса SQL. Район указывается в предложении Like, а параметр, определяющий порядок сортировки, используется в предложении Order By запроса SQL. В завершение посетитель направляется на страницу Результаты поиска, где он сможет просмотреть записи из базы данных, возвращенные только что сформированным запросом SQL. Response.Redirect("./search_results.aspx") Страница Результаты поиска Search_Results.aspx На странице Результаты поиска записи, соответствующие требованиям пользователя, выводятся в элементе управления Repeater. Label - первый элемент управления на странице. В нем выводится заголовок. <asp:Label В следующем элементе управления Label указывается число записей, соответствующих критериям, которые были заданы посетителем: <asp:Label В элементе управления Repeater с помощью четырех шаблонов отображается содержимое записей. <ASP:Repeater Элемент управления Repeater позволяет отображать однотипную информацию в формате, который определен заданными в этом элементе шаблонами. В этом случае записи помещаются в таблицу НTML. Шаблон HeaderTemplate используется до вывода записей на экран. <HeaderTemplate> При этом открывается тег Table: <Table width="100%" style="font: 8pt verdana"> В первой строке таблицы отображаются заголовки столбцов, выделенные полужирным шрифтом: <TR style="Background-Color:DFECD8"> Шаблон ItemTemplate предназначен для отображения записей, а каждая запись помещается в отдельную строку таблицы. В начале записи указывается код HLCN, представляющий собой ссылку на страницу Дом: <TD> В следующей ячейке указывается стоимость дома: <TD> Далее следуют данные о количестве спален и ванных комнат: <TD> Затем в таблицу помещается информация о месторасположении дома: <TD> Последний столбец HTML-таблицы содержит контактную информацию: <TD> После этого следуют закрывающие теги строки таблицы и шаблона: </TR> В элементе управления Repeater можно задать различные шаблоны для четных и нечетных строк. При выполнении такой установки шаблон ItemTemplate назначался бы первой, третьей, пятой и следующим нечетным строкам, а шаблон AlternatingItemTemplate - второй, четвертой, шестой и следующим четным строкам. В этом шаблоне используется другой цвет фона: <TR style="Background-Color:FFECA8"> Шаблон FooterTemplate применяется после вывода всех данных из базы. Перед закрытием HTML-тега Table выводится еще одна строка, которая, как и первая строка таблицы, содержит заголовки столбцов. Такой способ оформления таблицы удобен при наличии большого количества строк в ней. <TR style="Background-Color:DFECD8"> При загрузке страницы выполняется следующий код: Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs) Запрос SQL, полученный со страницы Поиск через переменную сеанса, помещается в объект DBCommand: DBCommand = New OleDbDataAdapter _ Запрос выполняется, а результативные записи заносятся в таблицу SearchResults объекта DataSet: DBCommand.Fill(DSHomeData, _ Между элементом управления Repeater и объектом DataSet устанавливается связь: repSearchResults.DataSource = _ Наконец, в элемент управления Label помещается число полученных из базы записей. Если возвращена одна запись, строка текста формируется следующим образом: If DSHomeData.Tables("SearchResults").Rows.Count = 1 Then Если же возвращено несколько записей, формулировка будет такой: Else Страница Дом Listing.aspx На странице Дом выводится полное описание, а также изображения дома, код которого передан на эту страницу. Первый элемент управления Label используется для вывода заголовка: <asp:Label Второй элемент Label предназначен для отображения описания дома, которое будет составлено из отдельных значений: <asp:Label Для вывода на экран изображений применяется элемент управления DataList: <asp:DataList id="dlPics" runat="server" Изображения выводятся по четыре в ряд: RepeatColumns="4"> Используется единственный шаблон: <ItemTemplate> В этом шаблоне имя файла изображения помещается в HTML-тег Image: <%# "<IMG SRC=""" & _ Код страницы выполняется при ее открытии. Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)
Начало
|
|
CITForum © 1997–2025