Возможности технологии ASP.NET по созданию распределенных приложений

 

Оглавление


Введение

Первое WEB приложение на ASP.NET

Коллекция ViewState

Global.asax - начало всех начал

Основные контролы веб-приложений

Использование шаблонов

TabControl

Прокрутка баннеров

DropDownList - Хранитель ключ значение

Panel

Пользовательский элемент

Программа-словарь

Литература


Введение


Целью курсовой работы является:

Изучить некоторые возможности технологии ASP.NET по созданию распределенных приложений.

Постановка задачи

Разработать пример распределенного приложения с использованием технологии ASP.NET.

Что такое ASP.NET.NET(Active Server Pages) - новая технология, исполняемая на платформе.Net FrameWork, которая увеличивает скорость разработки веб приложений, делая ее легкой и непринужденной. Приложения на ASP.NET выполняются быстрее обычных интерпретируемых языков. В ASP.NET используется событийная модель исполнения, напоминая разработку Win приложений. Проекты на ASP.NET выглядят красиво и структурировано, что облегчает их дальнейшее сопровождение.Приложения написанные на.NET это набор скриптов, которые выполняются на виртуальной машине.Net FrameWork, то есть для работы приложений на ASP.NET кроме самого веб сервера необходим еще и.NET FrameWork. Таким образом: при первом обращении к приложению идет компиляция скриптов в файлы.dll, а далее и их исполнение FrameWork-ом. При последующем обращении идет просто вызов dll тем самым увеличивается быстродействие по сравнению с другими скриптовыми языками, которые интерпретируются интерпретатором каждый раз при запросе.

Требования

Во-первых необходимо определить условие при которых будут работать ASP.NET приложения.

. Установленный .Net FrameWork.

. IIS версии не ниже 6.0

.Net FrameWork и IIS на MS Visual Studio 2010 устанавливаются автоматически вместе с ASP.NET

Преимущества ASP.NET

Как уже говорилось выше, скрипты компилируются, а не интерпретируются. Перекомпиляция происходит автоматически при перезагрузке приложения или изменении существующих скриптов. Выполнение, таким образом, существенно ускоряется.

Отделение кода. Благодаря тому, что дизайн сайта находится (может находиться) в файле отдельном от кода приложения, программисты и дизайнеры могу работать одновременно над проектом и не сталкиваться между собой. Тем самым код становится чистым и понятным. Такая технология называется code behind.

Настоящий отладчик. В отличии от других web языков Вам не придется после каждой строчки делать вывод в лог или на http достаточно только включить директиву трассировки и вся доступная информация будет на экране.

Используя Visual Studio возможно пошаговое выполнение приложения.

Используя ASP.NET Вы можете писать приложения на различных языках, благодаря тому что.NET является мультиязыковой технологией.

Развертывание. Развертывание приложения подразумевает лишь копирование файлов на сервер. Причем все настройки приложения хранятся в XML файле, ничего не придется настраивать дополнительно.

Файлы ASP.NET

.asax - файл обработчик событий приложения и сессий

.ascx - пользовательские элементы управления

.asmx - веб сервисы

.aspx - сами страницы

.config - файлы настроек

.cs - файл с кодом C# для страниц ASP.NET

Первое WEB приложение на ASP.NET


Откроем visual studio, выберем Create Web Site и шаблон ASP.NET Web Site. Выбираем место хранения файлов (локальный веб сервер) и язык разработки (C#)



По умолчанию должно создаться два файла.aspx и.aspx.cs. В первом файле размещается компоновка веб объектов, а во втором код на C# (технология code behind). В первой строке указывается файл, в котором указывается файл с кодом:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>


В файле.aspx происходит внешнее оформление страницы, добавление новых компонентов, изменение определенных свойств контролов, а в файле.cs - собственно код программы на C#. Пусть требуется создать сайт, который будет состоять из одной страницы и выводить дату и время на данный момент.

Для добавления данного функционала нужно перейти в редактирования файла default.aspx.cs. В нем уже имеется метод Page_Load. Он вызывается всегда, когда загружается страница.

Для вывода на экран надписи используется метод Write Класса Response. Для вывода текущей даты - класс DateTime и свойство Now.


protected void Page_Load(object sender, EventArgs e) { Response.Write("Привет. сейчас " + DateTime.Now); }

Приложение готово. F5 - запуск.



Коллекция ViewState


В процессе разработки Web-приложения возникают некоторые сложности. В частности, значения всех данных, введенных в элементы управления, после передачи клиенту уничтожаются, т.к. уничтожается сама страница, содержащая эти элементы управления. Для того чтобы сохранять значения элементов управления между обращениями к странице приложения, можно использовать несколько механизмов, рассматриваемых ниже.

Прежде всего, необходимо рассмотреть возможность применения состояния вида ( ViewState ). Его целесообразно использовать в том случае, когда необходимо организовать хранение данных в пределах одной страницы. Все элементы управления используют состояние вида по умолчанию для сохранения значений свойств между операциями обратной отсылки данных. Здесь же возможно организовать хранение своих собственных данных, состоящих из простых типов и специальных объектов.

Состояние вида организовано по принципу коллекции, которая, в свою очередь, имеет тип словаря. Это означает, что данные хранятся в формате "имя-значение". Каждый элемент при этом индексируется с помощью уникального строкового имени. Следующий пример добавляет в коллекцию ViewState элемент с именем Name и присваивает ему значение "Иван":["Name"]="Иван";

При этом, если в коллекции до этого не существовало элемента с именем Name, то он добавляется, если же такой элемент был, его значение заменяется новым.

Для извлечения элемента из коллекции необходимо использовать имя элемента. Кроме того, т. к. коллекция ViewState позволяет сохранять не только данные, состоящие из простых типов, но и специальные объекты (в общем случае - любые объекты), во время извлечения значения элемента необходимо преобразовать его тип к тому, который будет извлекаться. Следующий пример позволяет извлечь значение элемента Name и преобразовать его в строку:


string name;(ViewState["Name"]!=null)

name=(string)ViewState["Name"];


Проверка на наличие элемента коллекции необходима, т. к. при обращении к несуществующему элементу коллекции возникает исключение NullReferenceException.

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

Для демонстрации использования ViewState создадим пример, в котором после нажатия на кнопку "Отправить" данные текстовых полей сохраняются в состоянии вида, а поля очищаются. После нажатия на кнопку "Восстановить значения полей ввода" сохраненные значения полей считываются из состояния вида и помещаются в текстовые поля. Данный пример необходим только для демонстрации использования коллекции ViewState.

Для начала поместим на странице HTML-элемент "Таблица", который представляет собой описание обычной таблицы, и разместим в ее ячейках уже существующие элементы Label и TextBox. Кроме того, добавим на страницу кнопку. Присвоим вновь добавленной кнопке следующие параметры: ID=btn_RestoreTextBox, Text="Восстановить значения полей ввода".

Получившаяся в результате страница в режиме редактирования дизайна должна выглядеть следующим образом (рис. 1. <#"132" src="doc_zip3.jpg" />

Рис. 1.1. Web-страница примера в режиме дизайна


Внесем в исходный код страницы исправления в соответствии с рис. 1.1 <#"150" src="doc_zip4.jpg" />

Рис. 1.2. Исходный код страницы


Как видно из рис 1.2, в стандартный элемент HTML Table были добавлены два элемента: идентификатор ID=Table и ключевое слово, позволяющее обращаться к нему на стороне сервера - runat="server". Это необходимо для того, чтобы во время выполнения приложения у нас была возможность обращения к данному элементу из программного кода.

Теперь нужно изменить исходный код приложения, добавив к нему возможность сохранения и восстановления значений полей ввода с использованием ViewState. Для этого нам необходимо считать содержимое полей и поместить их в коллекцию. Т. к. в нашем случае таких полей всего два, проще будет использовать прямое обращение к ним, которое можно представить в такой форме:


ViewState["FirstName"]=tb_FirstName.Text;["LastName"]=tb_LastName.Text;


Для восстановления значений, сохраненных в состояние вида, можно воспользоваться следующим фрагментом кода:


tb_FirstName.Text=(string)ViewState["FirstName"];_LastName.Text=(string)ViewState["LastName"];


Тем не менее на практике часто возникает необходимость сохранения в состояние вида значений сразу нескольких элементов управления, которых на странице может присутствовать достаточно много. Для того чтобы сделать программный код более гибким и не перечислять в нем наименования всех элементов управления, расположенных на форме, можно организовать сохранение данных путем последовательного обращения к каждому из них в цикле. Известно, что все элементы управления, размещенные на форме, помещаются в коллекцию элементов управления, обращение к которой возможно осуществить при помощи свойства Controls. Этот механизм можно применять и к другим элементам управления, т. к. многие из них сами могут содержать другие элементы управления, которые, в свою очередь, могут содержать внутри себя еще элементы и т. д. Таким образом, для того, чтобы обеспечить чтение значений, введенных во все необходимые элементы управления, необходимо выбрать первый элемент управления, перебрать все элементы, входящие в него, при этом перебирая все их вложенные элементы до тех пор, пока не будут перебраны все элементы управления. Проще всего это сделать с помощью рекурсивной функции, которая вызывает себя в случае, если внутри текущего элемента управления существуют еще элементы управления. Также необходимо учесть, что в данном случае нас интересуют только элементы управления типа TextBox. Реализация такой функции может выглядеть следующим образом:


private void SaveTextinTextBox(ControlCollection controls, bool

SaveNested)

{(Control control in controls)

{(control is TextBox)

{

//Сохранить текст[control.ID]=((TextBox)control).Text;

}(control.Controls != null && SaveNested)

{(control.Controls, true);

}

}

}


Функция содержит два аргумента. Первый предназначен для передачи набора элементов управления, с которыми и предстоит работать, второй - для указания на необходимость осуществления перебора элементов управления, вложенных в текущий.

Цикл foreach осуществляет перебор всех элементов управления, переданных с помощью первого аргумента. Условие if (control is TextBox) необходимо для определения типа элемента управления. В случае, если текущий элемент управления является текстовым полем, его значение сохраняется в состояние вида, причем идентификатором элемента в коллекции ViewState будет являться ID элемента управления.

Условие if (control.Controls != null && SaveNested) позволяет вызвать функцию SaveTextinTextBox в случае, если текущий элемент управления имеет внутри себя вложенные элементы. Таким образом, функция позволяет осуществить перебор всех элементов управления, которые расположены на странице либо внутри другого элемента, избранного отправной точкой. В нашем примере таковым может являться объект Table1.

Функция чтения значений ViewState и их записи в соответствующие элементы управления может выглядеть следующим образом:


private void RestoreTexttoTextBox(ControlCollection controls, bool)

{(Control control in controls)

{(control is TextBox)

{(ViewState[control.ID]!=null)

((TextBox)control).Text=(string)ViewState[control.ID];

}(control.Controls !=null && saveNested)

{(control.Controls,true);

}

}

}


Она действует аналогичным образом, являясь рекурсивной. Создадим две приведенные функции внутри исходного кода рассматриваемого примера, а также внесем изменения в процедуру обработки нажатия на кнопку "Отправить". Теперь полная версия обработчика события нажатия на эту кнопку выглядит следующим образом:


protected void Button1_Click(object sender, EventArgs e)

{sname=string.Empty;tbSname=(TextBox)Page.FindControl("tb_SName");(tbSname!=null)

{= tbSname.Text;

}_Result.Text = "Здравствуйте, "+tb_FirstName.Text+"

"+sname+" "+_LastName.Text+"! Добро пожаловать в приложение ASP.NET";

lbl_Result.ForeColor = Color.Red;

//сохраняем значения полей ввода в коллекции ViewState

SaveTextinTextBox(Table1.Controls, true);_FirstName.Text = "";

tb_LastName.Text = "";

}

Создадим обработчик для события нажатия на кнопку "Восстановить значения полей ввода". Он выглядит следующим образом:

protected void btn_RestoreTextBox_Click(object sender, EventArgs e)

{

RestoreTexttoTextBox(Table1.Controls,true);

}


Теперь можно запустить приложение. При вводе значений в поля ввода текста и нажатии на кнопку "Отправить" на экран выводится надпись приветствия, а текст внутри полей ввода уничтожается. После нажатия на кнопку "Восстановить значения полей ввода" поля вновь заполняются текстом, введенным ранее. Это становится возможным благодаря использованию коллекции ViewState.

.asax начало всех начал


В совокупности все страницы ASP.NET входят в приложение; оно загружается как только к нему происходит обращение. Для того чтобы узнать это и другие события приложения используется файл global.asax (В VS 2010 global.asax добавляется автоматически и его можно открыть в обозревателе решений).

Добавляем файл в проект



Если открыть данный файл, то видно что в нем уже есть шаблоны для 5 событий

. Application_start отрабатывает когда загружается приложение

void Application_Start(object sender, EventArgs e) { // Code that runs on application startup }


. Application_End Приложение завершается.

. Application_Error ошибка в приложении.

4. Session_Start - начинается сессия для нового пользователя.

. Session_End - Завершается сессия.


Надо отметить что метод Session_End отрабатывает только тогда когда в настройках приложения Session State выставлено в InProc.

Например можно подсчитывать текущее количество пользователей на сайте. Для этого в обработчик события Session Start нужно добавить увеличение счетчика пользователей, а в Session End соответственно уменьшение полный код будет выглядеть так


void Application_Start(object sender, EventArgs e) { Application["users"] = 0; } void Application_End(object sender, EventArgs e) { } void Application_Error(object sender, EventArgs e) { } void Session_Start(object sender, EventArgs e) { Application["users"] = Convert.ToInt32(Application["users"]) + 1; } void Session_End(object sender, EventArgs e) { Application["users"] = Convert.ToInt32(Application["users"]) - 1; }


Основные контролы Web приложений


В Web приложениях кнопка делает постбэк (в HTML это называется submit) на какую-либо страницу (чаще всего на свою же). Основное отличие ASP.NET заключается в том, что по кнопке идет не только постбэк (передача post и get параметров), но так же еще отрабатывает событие Click, которое обрабатывается каким либо методом, то есть после нажатия кнопки не только перезагрузится страница, но и отработает метод подвязанный на событие Click. У кнопки имеются следующие интересные свойства:

- Указывает имя класса стилей из Вашего CSS файла- Надпись на кнопке- Когда true кнопка активна. То есть ее возможно нажать- Хранить или нет состояние элемента во ViewState- Указывается инструкция javascript, которая выполнится при клике по кнопке- Страница, на которую будет выполнен постбэк (передача параметров). Аналог action в тэге form- Всплывающая подсказка- Группа для проверки значений перед постбэком- когда false кнопка не отображается


Практически все перечисленные выше параметры являются общими для всех контролов, поэтому в дальнейшем можно рассматривать только индивидуальные для каждого элемента управления.

Основной обработчик события Click.

При двойном щелчке на кнопку открывается файл с кодом на C#. Если, к примеру, между фигурными скобками дописать Response.Write(Button1.Text); то на экран будет выведен текст на кнопке.


protected void Button1_Click(object sender, EventArgs e) { Response.Write(Button1.Text); }


Ссылка - HyperLink

Аналог A HREF в HTML, вот ее свойства:

ImageUrl - Адрес картинки, которая будет выступать в качестве ссылки- Текст ссылки- Собственно URL на который будет выполнен переход по ссылке- Определяет куда будет загружена страница (Top, Parent, фрейм и тд)- Служит для отметки какой-либо опции или согласия на какой-либо вопрос на веб странице. По-настоящему полезное свойство лишь одно, собственно для чего он и предназначен, показать отмечен контрол или нет:

- Отмечен контрол или нет- Текст рядом с контролом. (Вопрос или название опции)


Событие CheckedChanged отрабатывает, когда состояние контрола изменилось. На примере подвяжем на это событие метод и выведем на страницу текущее состояние контрола. Для того, чтобы событие отрабатывало сразу после смены состояния, необходимо выставить AutoPostBack=True;


protected void CheckBox1_CheckedChanged(object sender, EventArgs e) { Response.Write(CheckBox1.Checked); }


RadioButton- Служит для выбора одного из предложенных вариантов ответа. Как правило, используется в группе.

Свойства контрола: - Отмечен контрол или нет- Определяет имя группы в которое входит контрол- Текст рядом с флажком

Событие CheckedChanged отрабатывает когда состояние контрола изменилось.


Использование шаблонов


Для создания сайта по шаблону в ASP.NET используются Master Page. Поясним что такое шаблоны на примере.

Например, имеется шапка сайта, меню слева и изменяемая часть контента справа. Так вот, чтобы не делать на всех страницах одну и туже шапку, меню и т.д. применяют master page, на которой это все размещают, а контент будет выводится в специальную область. Итак создаем Master Page: для этого добавляем новый элемент



На странице автоматически добавится ASP.NET контрол asp:contentplaceholder. Это как раз и есть изменяемая часть. Вся остальная часть выглядит как обычная страница и в ней можно поместить шапку, меню и т.д. Для того чтобы страница выводилась в шаблон нужно создать новую страницу, указать опцию select master page и выбрать шаблон. В сформированной странице автоматически появится элемент asp:Content. В этом элементе в параметре СontentPlaceHolderID указано имя contentplaceholder, в который будет выводиться информация. Сама же информация о том, что страница использует шаблон, находится в ее заголовке в параметре MasterPage.


<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>


Таким образом, при загрузке страницы все содержимое ее тэга Content будет помещаться в шаблон в элемент ContentPlaceHolder.



В Windows приложениях есть элемент управления Tab, который представляет собой панель с закладками. К сожалению, в вебе такого нет, но можно сделать. Для этого нужно использовать элемент Menu, Multiview, View.

Расположим элементы как показано на картинке:



Пунктам меню в параметр Value назначаем 0,1,2.

Эти индексы будем использовать в качестве индекса активного View



Далее добавляем обработчик события MenuItemClick для меню. И добавляем следующий код.


protected void Menu1_MenuItemClick(object sender, MenuEventArgs e) { MultiView1.ActiveViewIndex = Convert.ToInt32(Menu1.SelectedValue); }


Теперь как пользователь кликнет по меню, будет меняться активная вьюшка.


Прокрутка баннеров


Наверное каждый веб мастер хочет хотя бы окупить затраты на хостинг. Для этого можно, например, размещать баннеры. В ASP.NET есть специальный компонент под названием AdRotator. Итак, размещаем данный компонент на странице. И привязываем источник данных. Я в качестве источника выбрал базу данных, в ней необходимо создать табличку, в которой будет как минимум два поля:

. Полный путь до баннера.

. URL куда будет направляться пользователь по щелчку по этому баннеру.

После того, как привязка сделана, необходимо в AdRotator указать наши поля. В свойство ImageUrlField указываем имя колонки содержащей путь до баннера. В свойство NavigateUrlField указываем имя колонки содержащей URL.

Вот собственно и все. Теперь при загрузке страницы автоматически будет выбираться один из баннеров находящийся в нашей базе данных. В качестве источника данных можно также выбрать объект, SiteMap или XML файл.

- Хранитель ключ значение


Аналогом ComboBox В ASP.NET является DropDownList. В коде HTML он будет выглядеть как SELECT. Рассмотрим как прикрутить источник данных к данному контролу и получить ключ - значение. Как всегда я монтирую базу данных, хотя можно и другие источники. Указываем какое поле отвечает за отображение в контроле, а какое будет передаваться в качестве значения (чаще всего это ID записи)



Добавим кнопку.

Выводим значение и текст выбранного пункта


protected void Button1_Click(object sender, EventArgs e) { Response.Write(DropDownList1.SelectedItem.Value + " " + DropDownList1.SelectedItem.Text); }


- Группировка элементов

используется в качестве контейнера для нескольких элементов и может выполнять групповые операции, например скрытия объектов. Добавим две панели и разместим в первой текстовой поле и кнопку во второй панели создадим Label и будем выводить в него текст введенный в текстовое поле. После нажатия на кнопку на странице должна быть только введенная надпись. Первоначально установим Visible для второй панели в false


<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></asp:Panel> <asp:Panel ID="Panel2" runat="server" Height="50px" Visible="False" Width="125px"> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></asp:Panel>

событии Click кнопки скрываем текстовое поле и кнопку, устанавливая visible=false у первой панели


protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text; Panel1.Visible = false; Panel2.Visible = true; }


В итоге на одной странице мы можем как принимать данные от пользователя так и показывать некий результат, причем без отображения все контролов, в которые вводилась информация.


Пользовательский элемент


При многократном использовании каких-либо контролов можно создать свой и в дальнейшем использовать его.

Создаем контрол




Оглавление Введение Первое WEB приложение на ASP.NET Коллекция ViewState Global.asax - начало всех начал Основные контролы веб-приложений

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ