Пятница, 29.03.2024, 09:07
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Создание новых вхождений web-регистратора
00:53
Создание новых вхождений web-регистратора
Создание новых вхождений web-регистратора
На данный момент имеются все функциональные возможности, необходимые
для извлечения и вывода списка вхождений, которые могут появиться на нашем
сайте. Мы однако пока не умеем создавать новые вхождения без Notepad! В идеа-
ле желательно иметь на сайте форму, которую можно было бы использовать для
создания новых вхождений.
Практикум: создание вхождений web-регистратора
1. Войдите в Solution Explorer, щелкните правой кнопкой мыши
на проекте Weblog и выберите пункт меню Add | Add Web Form.
Введите ИМЯ — Edit.aspx.
2. Откройте Designer для данной страницы. Щелкните мышью один раз
на основание страницы и с помощью окна Properties замените
Значение свойства pageLayout на FlowLayout.
3. Выберите пункт меню View HTML Source. Добавьте следующий код:
<%@ Page language="c#" Codebehind=nEdit.aspx.cs" AutoEventWireup="false"
Inherits=IIWebLog.Edit" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN* >
<html>
<head>
<meta name=l1 GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
<meta name="vs_targetScheman
content="http://schemas.microsoft.com/intellisense/ie5">
<link rel="stylesheet" href="style.ess">
</head>
<body>
<form id=nEdit" method="post" runat="server">
<div ciass="header">
Disraeli's Weblog
</div> . . .. ••• ••, :. л / ' .
<div class="normalHeading">
Create a New Entry
: <ЬГ> •• '. • ' • ' : ••' /• •/ • •• • У • ' •
<div class="normal">
<table cellspacings"0" cellpadding="3">
<tr>
<td class="normal">
Title:
</td>
<td>
</td>
</tr>
<tr>
<td class="normal">
.. . • - • •••.• D e t a i l s ^ • :'. •. • •. •
</td>
• ' .:•: . . '. . : < t d > . . . ' • '
</td>
</tr>
<tr>
<td colspan="2" align="right">
710 Глава 24
</td>
</tr>
</table>
</form>
</body>
</html>
4. Выберите пункт меню View | Design; вы должны
получить изображение, аналогичное изображению
на рисуке справа.
5. Воспользовавшись окном с инструментами,
перенесите мышью управляющий элемент
Textbox и разместите его в маленьком окошке,
расположенном справа от Title.
D i s r a e l i ' s W e b l o g
C r e a t e a N e w E n t r y
1
I D i s r a e l i ' s W e b l o g
C r e a t e
Title:
Details t
a N e w E n t r y
Titfei
Details:
Повторите операцию, но на этот раз разместите
управляющий элемент в маленьком окошке,
расположенном справа от Details (см. рис. слева).
• Присвойте свойству I D верхнего
управляющего элемента значение textTitie.
• Присвойте свойству ID нижнего
управляющего элемента значение textTitie.
Измените значение его свойства TextMode
на Multiline.
6. Воспользовавшись окном с инструментами,
перенесите мышью управляющий элемент Button
и разместите его в длинном пустом окне,
расположенном в самом низу. Измените значение
его свойства ID на buttonok, а свойства Text —
на Save changes (сохранить изменения).
7. Слегка увеличьте размеры двух управляющих
элементов Textbox, как показано на рисунке
справа.
8. Мы хотим добиться того, чтобы при нажатии
кнопки Save Changes пользователь сохранял
изменения только тогда, когда оба текстовых
окна заполнены. Для этого можно воспользоваться проверкой
допустимости, предоставляемой ASP.NET, которая автоматически проверяет,
что вся необходимая информация введена, а если нет, то выводит
соответствующее сообщение.
9. Перенесите МЫШЬЮ управляющий Элемент ReguiredFieldValidation
и разместите его справа от текстового окна Title. Измените значение
его СВОЙСТВа ErrorMessage на Required, а СВОЙСТВУ ControlToValidate
присвойте значение textTitie.
— ' • - • • . • • •••
D i s r a e l i ' s W e b l o g
C r e a t e a M e w E n t r y
1
J
1
Приложения ASP.NET 111
10. Повторите действия, описанные в п. 9, но на этот раз перенесите
мышью новый управляющий элемент и разместите его справа
от окна Details. Измените значение его свойства ErrorMessage
на Required, а СВОЙСТВУ ControlToValidate Присвойте
значение textDetails.
ч
11. Войдите в Solution Explorer и откройте редактор кода для Entry.
Добавьте следующий член:
/// <summary>
///Краткое описание класса Entry.
/// </summary>
public class Entry
{
.//члены.. .
private String ^.filename;
private DateTime _timestamp;
private String _title;
private String „details;
12. Добавьте следующее свойство:
[XmllgnoreO ] public String Filename
' : ,. - • get • . . . •-. •
return „filename;
; :;^:U:::'.::4- • s e t ' " . '. •
„.filename - value;
•;;•,;' • ; • > . • • . : ^ , . -•- > . :: ; . о - . . \ : }
: : - y л • > : • • • : : ; • ; •. •; •;::•;•,•;:•;• ;-•.. ;-:..:; ; | : . - - : : ; - : - - : , : : ; , . : : - •./• v - ; •/••:.;:,;,•-;;•• у : , . ч - у . ; , ; ; г : :
; •. •. •.
13. Добавьте в класс следующий метод:
public void Save()
{
// имеется ли у нас имя файла?
if (Filename == null)
{
// получение имени файла на основе даты.. .
Timestamp = DateTime.Now;
Filename = String.Format(Л{0:d4}{I:d2}{2:d2}_{3:d2}{4:d2}.xml*,
(int)Timestamp.Year, (int)Timestamp.Month,
(int)Timestamp.Day, (int)Timestamp.Hour,
(int)Timestamp.Minute);
}
/ / получение полного имени файла...
String filepath = Global.EntryFilePath + "\\K + Filename;
// создание сериализатора и сохранение...
Filelnfo filelnfo = new Filelnfo(filepath);
if(filelnfo.Exists == true)
filelnfo.DeleteO ;
FileStream stream =
new FileStream(filelnfo.FullName, FileMode.Create);
XmlSerializer serializer = new XmlSerializer(this.GetTypeO);
serializer.Serialize(stream, this);
stream.Close();
712 Глава 24
14. Откройте редактор кода для файла Edit.aspx.cs.
Найдите метод Page_Load() и добавьте в него следующий код:
private void Page_Load(object sender, System.EventArgs e)
// была ли сохранена данная страница?
if (IsPostfeack == true)
// создание объекта нового вхождения...
Entry newEntry = new Entry () ;
// присваивание значений...
newEntry.Title = textTitle.Text;
newEntry.Details = textDetails.Text;
// сохранение объекта...
newEntry.Save();
// вывод списка...
Response.Redirect("default.aspx*);
15. Откройте редактор HTML для файла Default.aspx.
Добавьте следующий код — часть кода, которую мы добавили
к странице ранее, опущена для краткости:
<asp:DataList id="datalistEntries" runat="servern>
</asp:DataList>
<br> _ ^ в
<div сlass="normal">
<a href="edit.aspx">Create a new entry</a>
<hr color="#000000">
<div class="normalH>
<asp:label id="labelCopyright" runat=H server">(copyright)</asp:label>
Disraeli's Weblog
W?<Jn<:»«i*y, 19 Ivtr 2001 ' Tod*y was such ,
Щ
Enctrfay, 18 )uty 2001 - An4 this is whet Ьаррелсй tod<sy.
huh*
й
Tuc*<lfty, 17 July ZOQi - 5 have diih^td W>c <?ft««;l* b *Л« XKt dh...
*doy, 17 Jvly 2001 - More weblo9 entries?) WOvyi
i
В папке Entries создан новый файл
(см. рис. справа).
Запустите проект. Щелкните на ссылке Create a new
entry (создание нового вхождения). На экране появится
форма. Заполните ее и щелкните на кнопке Save Changes.
Страница перезагрузится, новое вхождение станет види-
мым (см. рис. слева).
Rte Edft Vtew Favorites Tools Help
ФВаск - «Ф - -4j : ^ Q
. j C: ' wwroot\v еЫ од'^Елtries ^£j
•'^OtherEntry.xml
i20010718 14t9.xml
•Type: XML Document: |223 bytes ^3 My Computer Л
Приложения ASP.NET 713
\?- -. . -
" "* " ^3 Jj i£ i^^vo -jjF
Disraelis Weblog
BS5&fr*::" -lafxl
1
Create a New Entry
Oetate - blank
| >:
j j Pequirsd
, s. |
это работает
Создание формы в Edit.aspx практически не
ОТЛИЧаеТСЯ ОТ СОЗДаниЯ Страницы Default.aspx.
Для обоих классов было использовано сочетание
HTML-кода и редактора.
При нажатии кнопки на форме выполняется
код, производящий проверку допустимости в соот-
ветствии с управляющими элементами, которые
были добавлены на странице. Каждый из них был
приписан отдельному управляющему элементу
Textbox. При нажатии кнопки выполняется код,
проверяющий все ли элементы заполнены, и если
не все, то код выводит сообщение (см. рис. слева).
Если проверка допустимости пройдена успешно,
то страница отправляется обратно ASP.NET. В этот
момент снова вызывается метод Page_Load(), но
есть возможность проверить и убедиться в том, что страница действительно по-
сылалась обратно; для этих целей используется свойство isPostBack:
private void Page_Load(object sender, System.EventArgs e)
// была ли сохранена данная страница?
if(IsPostBack == true)
{
Если страница посылается обратно, то мы создаем новый объект Entry:
// создание объекта нового вхождения...
Entry newEntry = new Entry();
\
Когда страница посылается обратно, свойство Text управляющих элементов
Textbox автоматически наполняется тем, что было введено пользователем. Это
означает, что есть возможность поступать следующим образом:
// присваивание значений...
newEntry.Title = textTitle.Text;
newEntry.Details = textDetails.Text;
Далее мы требуем от объекта Entry, чтобы он сохранил самого себя (ниже этот
вопрос будет рассмотрен более подробно):
// сохранение объекта...
newEntry.Save();
После того как вхождение сохранено, мы обращаемся к ASP.NET, с тем чтобы
браузер перешел к Default.aspx и можно было бы увидеть вновь созданное вхож-
дение:
// вывод списка...
Response.Redirect("default.aspx*);
Для сохранения вхождения требуется имя файла, которое должно быть уникаль-
ным (в противном случае будут затерты другие вхождения), поэтому имя файла
составляется с использованием даты и времени, когда вхождение было сохранено:
714 Глава 24
public void Save()
{
// есть ли у нас имя файла?
if (Filename == null)
{
// получение имени файла на основе даты.
Times tamp = DateTime.Now;
Filename = String.FormatC{0:d4}{I:d2}{2:d2}_{3:d2}{4:d2}.xml",
(int)Timestamp.Year, (int)Timestamp.Month,
(int)Timestamp.Day, (int)Timestamp.Hour,
(int)Timestamp.Minute);
Имя файла сохраняется в виде свойства (причина, по которой мы поступаем
именно так, станет очевидной несколько позже), и для того чтобы в действитель-
ности сохранить его, необходимо преобразовать имя файла в полный физический
путь:
// получение полного имени файла. . .
String filepath = Global.EntryFilePath + u\\" + Filename;
Получив это имя, мы используем объект xmiseriaiizer для сохранения объекта
на диске. Метод сериализации получает в качестве объекта поток, представляю-
щий собой файл, в который будет осуществляться запись, и объект Entry, после
чего свойства последнего преобразовываются в XML-строку, т. е. осуществляются
действия, прямо противоположные тем, которые перед этим выполнялись функ-
цией Deserialize():
// создание сериализатора и сохранение...
Filelnfo filelnfo = new Filelnfо(filepath);
if(filelnfо.Exists == true)
filelnfo.Delete();
FileStream stream = new FileStream(filelnfo.FullName, FileMode.Create);
Xmiseriaiizer serializer = new Xmiseriaiizer(this.GetType());
serializer.Serialize(stream, this);
stream.Close();
После ТОГО как файл Default.aspx будет перезагружен, метод GetAllEntriesO
вернет полный список файлов, включая и только что созданный.
Редактирование вхождений web-регистратора
Теперь у нас есть форма, которую можно использовать для создания новых
вхождений. Но может ли она пригодиться для редактирования уже существующих
XML-файлов на диске?
В этом разделе мы познакомимся с тем, каким образом нужно изменить прило-
жение, чтобы редактировать уже имеющиеся вхождения.
Практикум: редактирование вхождений web-регистратора
1. Откройте Designer ДЛЯ Default.aspx.
2. Щелкните правой кнопкой мыши на управляющем элементе DataList
и выберите пункт меню Edit Template | Item Template.
3. Воспользовавшись окном с инструментами, перенесите мышью
управляющий элемент Hyperlink и разместите его рядом
с управляющим элементом Label зеленого цвета (см. рис. на стр. 715).
Приложения ASP.NET 715
4. Используя окно Properties, выберите свойство
DataBindings управляющего элемента Hyperlink.
Из списка, расположенного слева, выберите
пункт NavigateUrl.
5. Щелкните мышью на переключателе Custom binding
expression и введите следующее выражение:
1'edit.aspx?filename=J' DataBinder.Eval (Container,
"Dataltem.Filename")
6. Щелкните мышью на ОК чтобы сохранить изменения
в привязке.
7. Снова воспользуйтесь окном Properties — измените
значение свойства Text управляющего элемента
Hyperlink на Edit, а значение свойства cssciass —
на entry.
8. Откройте редактор кода для файла Global.asax.
Найдите метод LoadEntryO и внесите в него следующие изменения:
// LoadEntry - загрузка вхождения с диска...
public static Entry LoadEntry(String filename)
{
// У нас есть имя, теперь необходимо узнать путь. . .
String filepath = EntryFilePath + "\\" + filename;
// открытие файла...
FileStream file = new FileStream(filepath, FileMode.Open);
// создание сериализатора...
XmlSerializer serializer = new XmlSerializer(typeof(Entry));
Entry newEntry = (Entry)serializer.Deserialize(file);
// закрытие файла,
file.Close();
// обновление времени, даты и имени файла.. .
newEntry.Timestamp=new Filelnfo(filepath).LastWriteTime;
newEntry„Filename = filename;
// возврат вхождения...
return newEntry;
Запустите проект. Щелкните мышью на ссылке Edit, и вы увидите, что появится
форма Create New Entry. Но самое интересное — это линейка Address. Имя XML-
файла, в котором содержатся данные текущего вхождения, оказались "встроенны-
ми" в URL-адрес:
i Address Щ\ http;//loca!hosl:/VVebLog/edil:,aspx?filename=20010718_1419,xml т| [
Как это работает
На данный момент мы пока еще не умеем редактировать нашу страницу, однако
очередной задачей является внесение таких изменений в Edit.aspx и Edit.asp.cs,
которые позволят нам найти имя файла соответствующего вхождения в URL-адре-
се и загрузить вхождение.
716 Глава 24
Самое интересное здесь — это привязка данных. Мы привязываем свойство
Navigateuri нового управляющего элемента Hyperlink к следующему выражению:
*edit.aspx? filename^ + DataBinder.Eval(Container, "Dataltem.Filename")
Можно увидеть, каким образом — на каждой итерации по массиву объектов
Entry — извлекается значение свойства Filename очередного объекта и присоеди-
няется В КОНеЦ строки edit.aspx?filenames Это позволяет получить ПОЛНЫЙ
URL-адрес.
Загрузка выбранного вхождения
Чтобы загрузить выбранное вхождение в момент просмотра Edit.aspx, требу-
ется всего лишь отыскать "параметр" filename, который может быть, а может
и не быть включен в URL-адрес.
Практикум: загрузка выбранного вхождения
1. Откройте редактор кода для файла Edit.aspx.cs. Найдите метод
Page_Load() И добавьте Следующий КОД!
private void Page_Load(object sender, System.EventArgs e)
// сохранена ли страница?
if(IsPostBack == true)
// создание объекта для нового вхождения...
Entry newEntry = new Entry();
/•/• есть ли у нас имя файла, которое следует использовать?
if(Request.Params[•filename*] l= null)
newEntry.Filename = Request.Params[* filename"];
// присваивание значений...
newEntry.Title = textTitle.Text;
newEntry.Details = textDetails.Text;
// сохранение вхождения...
newEntry.Save();
// вывод списка...
Response.Redirect(•default.aspx");
••.else ••
// удалось ли нам получить имя файла?
String filename = Request.Params[•filename*];
if (filename I - null)
//загрузка объекта вхождения...
Entry entry ~ Global.LoadEntry(filename);
// наполнение его полей.
textTitle.Text = entry.Title;
textDetails.Text =. entry ..Details;
Запустите проект. Теперь, если вы щелкните мышью на ссылке Edit, то вхожде-
ние будет загружено в новую страницу. Все изменения, внесенные в данные теку-
щей формы, будут сохранены в XML-файле после нажатия Save Changes.
Приложения ASP.NET 717
Как это работает
В .NET параметры могут поступать на страницу двумя способами: либо через
переменные текущей формы, либо через строку запроса. В общем и целом,
ASP.NET выполняет одну замечательную вещь — он позволяет скрыть то, каким
именно образом формы работают в Паутине; все, о чем приходится беспокоить-
ся,— это переменные строки запроса.
Переменные строки запроса — это переменные, которые располагаются в URL-
адресе после вопросительного знака. В данном случае имеется единственная пере-
менная С именем filename, которая обладает значением 20010718_1419.xml:
http://localhost/WebLog/edit.aspx?filename=20010718_1419.xml
А вот следующий URL, напротив, включает в себя две переменные а и ь; пере-
менной а присваивается значение Jack, а переменной ь — coffee. Переменные
отделяются одна от другой символом амперсанда (&):
http://anotherserver/page/aspx?a=Jack&b=Coffee
Если в метод Page_Load() возвращается значение isPostBack, равное false, то
это означает, что данная страница загружается в первый раз. Это предоставляет
возможность присвоить в качестве начальных значений свойству Text информа-
цию, которая хранится в файле (часть кода опущена для краткости):
private void Page_Load(object sender, System.EventArgs e)
{
// сохранена ли страница?
if(IsPostBack == true)
else
// удалось ли получить имя файла?
String filename •= Request.ParamsC"filename"]
if (filename 1 = null)
Свойство Request.Params, выделенное в приведенном выше коде, может быть
использовано для осуществления доступа к параметрам, которые передаются стра-
нице. В данном примере мы пытаемся получить и получаем значение параметра
filename. Если бы мы щелкнули мышью на ссылке Create new entry, то этот пара-
метр был бы пустым. Поскольку есть параметр, то мы осуществляем загрузку
вхождения с диска и обновляем свойство Text каждого управляющего элемента:
// загрузка объекта вхождения...
Entry entry = Global.LoadEntry(filename);
// наполнение его полей...
textTitie.Text = entry.Title;
textDetails.Text = entry.Details;
Вторая часть этой проблемы возникает при отправке страницы обратно. Снова
приходится обращаться к свойству Request.Params, чтобы узнать, есть ли уже
какое-либо имя файла. Если имеется, то именно его и следует использовать —
в таком случае метод save () заменит существующий файл на новый, содержащий
все сделанные изменения. Если же имя отсутствует, то метод Save о воспользуется
718 Глава 24
текущими датой и временем для создания нового имени (здесь часть кода также
опущена):
private void Page_Load(object sender, System.EventArgs e)
{
// сохранена ли страница?
if(IsPostBack == true)
{
// создание объекта для нового вхождения...
Entry newEntry = new Entry();
//есть ли у нас имя файла, которое следует использовать?
if(Request.Params["filename"] != null)
newEntry.Filename = Request.Params[*filename*];
// присваивание значений...
newEntry.Title = textTitle.Text,•
newEntry.Details = textDetails.Text;
// сохранение вхождения...
newEntry.Save();
// вывод списка...
Response.Redirect("default.aspx*);
}
Мы научились выводить список вхождений и можем использовать web-сайт для
создания новых вхождений и для внесения изменений в уже существующие.
Категория: информатика | Просмотров: 1221 | Добавил: basic | Рейтинг: 5.0/1
Всего комментариев: 1
1 Gaztraiteve  
0
На продаже приборов для контроля веществ в различных средах специализируется наша фирма. У нас всегда можно купить газоанализаторы, программируемые кондуктометры, измерители концентрации озона, плотномеры и pH-электроды. В своей работе мы делаем основной упор на работу с конечным потребителем. Доставка товаров производится по всей России. Заходите на сайт, выбирайте и заказывайте!

Gazoanalisator: [url=http://gazoanalisator.ru]газоанализатор Хоббит Т
[/url]

Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz