Перейти к содержимому

Как создать сайт в visual studio code

  • автор:

Пошаговое руководство. Создание базового проекта определения сайта

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

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

В этом пошаговом руководстве демонстрируются следующие задачи:

  • Создание определения сайта с помощью шаблона проекта Visual Studio.
  • Создание сайта SharePoint с помощью определения сайта в SharePoint.
  • Добавление визуальной веб-части в решение.
  • Настройка страницы default.aspx сайта путем добавления в нее новой визуальной веб-части.

Примечание. Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

  • Поддерживаемые редакции Microsoft Windows и SharePoint. Дополнительные сведения см. в разделе «Требования к разработке решений SharePoint».
  • Visual Studio.

Создание решения определения сайта

Сначала создайте проект определения сайта в Visual Studio.

Создание проекта определения сайта
  1. В строке меню выберите Файл >Создать >Проект. Если интегрированная среда разработки настроена для использования параметров разработки Visual Basic, в строке меню выберите «Файл >нового проекта». Откроется диалоговое окно Создание проекта .
  2. Разверните узел Visual C# или узел Visual Basic, разверните узел SharePoint и выберите узел 2010.
  3. В списке шаблонов выберите шаблон проекта SharePoint 2010.
  4. В поле «Имя» введите TestSiteDef и нажмите кнопку «ОК«. Откроется мастер настройки SharePoint.
  5. На странице «Указание сайта и уровня безопасности для отладки» введите URL-адрес для сайта SharePoint, в котором требуется выполнить отладку определения сайта, или используйте расположение по умолчанию (http:// System Name/).
  6. В разделе » Что такое уровень доверия для этого решения SharePoint?» , нажмите кнопку «Развернуть как решение фермы». Все проекты определения сайта должны быть развернуты в качестве решений фермы. Дополнительные сведения об изолированных решениях и решениях фермы см. в разделе «Изолированные решения».
  7. Нажмите кнопку Готово . Проект отображается в Обозреватель решений.
  8. В Обозреватель решений выберите узел проекта, а затем в строке меню выберите «Добавить новый элемент проекта>«.
  9. В разделе Visual C# или Visual Basic разверните узел SharePoint и выберите узел 2010.
  10. В области «Шаблоны» выберите шаблон определения сайта, оставьте имя в качестве SiteDefinition1 и нажмите кнопку «Добавить«.

Создание визуальной веб-части

Теперь необходимо создать визуальную веб-часть, отображаемую на главной странице определения сайта.

Создание визуальной веб-части
  1. В Обозреватель решений нажмите кнопку «Показать все файлы«.
  2. Выберите узел проекта SiteDefinition1, а затем в строке меню выберите «Добавить новый элемент проекта>«. Откроется диалоговое окно Добавление нового элемента.
  3. Разверните узел Visual C# или узел Visual Basic, разверните узел SharePoint и выберите узел 2010.
  4. В списке шаблонов выберите шаблон визуальной веб-части , сохраните имя VisualWebPart1 по умолчанию и нажмите кнопку «Добавить «. Откроется файл VisualWebPart1.ascx .
  5. В нижней части VisualWebPart1.ascx добавьте следующую разметку, чтобы добавить три элемента управления в форму: текстовое поле, кнопку и метку:
protected void btnSubmit_Click(object sender, EventArgs e)
Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs) lblName.Text = tbName.Text End Sub 

Этот код добавляет функциональные возможности для нажатия кнопки веб-части.

Добавление визуальной веб-части на страницу ASPX по умолчанию

Затем добавьте визуальную веб-часть на страницу ASPX по умолчанию определения сайта.

Добавление визуальной веб-части на страницу ASPX по умолчанию
  1. Откройте страницу default.aspx и добавьте следующую строку после тега WebPartPages :

Развертывание и запуск решения определения сайта

Далее, разверните проект в SharePoint, а затем запустите проект.

Развертывание и запуск определения сайта
  • В строке меню выберите «Сборка >deploy TestSiteDef».
  • Нажмите клавишу F5. Visual Studio скомпилирует код, добавит его компоненты, поместит все его файлы в WSP-файл пакета и развернет этот WSP-файл на сервере SharePoint. Затем SharePoint устанавливает файлы, а затем активирует компоненты.

Создание сайта на основе определения сайта

Затем создайте сайт с помощью нового определения сайта.

Создание сайта с помощью определения сайта
  1. На сайте SharePoint появится страница «Новый сайт SharePoint».
  2. В разделе «Название и описание» введите «Мой новый сайт» для заголовка и описания сайта.
  3. В разделе «Адрес веб-сайта» введите mynewsite в поле имени URL-адреса.
  4. В разделе «Шаблон» выберите вкладку «Настройки SharePoint».
  5. В списке «Выбор шаблона » выберите SiteDefinition1.
  6. Оставьте другие параметры по умолчанию и нажмите кнопку «Создать «. Появится новый сайт.

Тестирование нового сайта

Теперь необходимо протестировать работу созданного сайта.

Тестирование нового сайта
  • На странице ASPX по умолчанию введите текст и нажмите кнопку «Изменить текст метки» рядом с текстовым полем. Текст отобразится на метке справа от кнопки.

Связанный контент

  • Практическое руководство. Создание приемника событий
  • Разработка решений SharePoint

Урок 1. Начало работы с Visual Studio Code. Создание дизайна страниц

В процессе выполнения всех уроков, вами будет создан полноценный веб-сайт юридической конторы.

Структура веб-страниц представлена на рисунке 1.

Shema

1 — Структура итогового веб-сайта

Цель: ознакомиться с Visual Studio Code, а так же создать страницу с дизайном для всего сайта.

– Исследовать рабочую область.
– Научиться создавать новую страницу, используя содержимое HTML5, CSS.
– Научиться сохранять документ.
– Научиться изменять название страницы и текстовые заголовки.
– Научиться добавлять изображения на передний план и в качестве фоновых изображений.

В результате выполнения данного урока у вас должна получиться такая веб-страница (рисунок 1.1):

lab1_1

Рисунок 1.1 — Предварительный просмотр веб-страницы

Подготовка к созданию проекта, изучение редактора Visual Studio Code. (Установка Visual Studio Code)

Для создания проекта «Юридическая контора «Советник»» нам понадобится рабочая папка под проект.
Создайте папку на локальном диске посредствам проводника или другого файлового менеджера.

Для реализации проекта в качестве редактора вы будете использовать современный инструмент — Visual Studio Code.
Visual Studio предлагает общедоступные инструменты и гибкость, необходимые для создания и развертывания современных веб-приложений.

– HTML5, CSS3, LESS/SASS, JavaScript
– ASP.NET, Node.js, Python, JavaScript
– NuGet, Grunt, Gulp, Bower, npm.
– Платформа и среда выполнения с открытым кодом.
– Развертывание в Windows, Azure, Mac или Linux.
– Бесплатно для небольших групп и разработчиков открытого кода.

– Запустите Visual Studio Code. В боковой панели навигации кликните по иконке страниц.(рисунок 1.2).

lab1_3

1.2 — Боковая панель

– В появившемся меню, кликните на кнопку Открыть папку и в открывшемся окне выберите созданную заранее папку Sovetnik. Кликните кнопку Выбор папки.

lab1_4

1.3 — Боковая панель. Выбранная папка

– Для создания первой страницы сайта design.html наведите мышку на область названия папки(проекта) SOVETNIK и кликните значок . В появившейся форме введите design.html

lab1_6

1.4 — Создан файл design.html

Наполнение папки Sovetnik

Для создания проекта, нам понадобятся дополнительные файлы: CSS, JS, мультимедиа.

– Для этого скачайте в созданную вами папку, папки и файлы из папки work_files.

lab1_9

1.5 — Папка Sovetnik

– Откройте редактор. Папки появились в навигационном меню проекта. Они будут задействованы позже.

lab1_10

1.6 — Название страницы

Создание дизайна сайта.

Для создания дизайна сайта нами будет подключен файл CSS, в котором указаны свойства для элементов HTML5. Изучение CSS в данном электронном учебном пособии не предусмотрен.

– Заполните файл design.html согласно стандартной структуре HTML5 документа, как на рисунке 1.7:

lab1_7

1.7 — Стандартная структура

– Между тегами title введите название страницы ЮК Советник (рисунок 1.8).

Shema

1.8 — Название страницы

– Следующим шагом будут meta и link данные. Между тегами head добавьте следующие строки (рисунок 1.9):

Shema

1.9 — Добавлены meta и link данные

Данным кодом вы к файлу design.html подключили css файл со свойствами для элементов HTML5, а так же meta name=»viewport» для того ,что бы сообщить браузеру, что ваша страница предназначена для правильного поведения области просмотра как на персональных компьютерах ,так и на мобильных устройствах.

– Для отображения страницы как на примере, нужно прописать id для тэгов и разделительную полосу при помощи тега hr.

Shema

1.10 — Выделеные области нужно добавить на свою страницу.

– Добавим логотип на страницу. Логотип у вас используется в формате SVG, если же у пользователя поддерка SVG не предусмотрена браузером выводиться будет альтернативное изображения в формате PNG.
Вся область логотипа и подпись снизу будет обернута DIV с именем center для того, что бы все объекты внутри распологались по центру. Клик по картинке будет переводить вас на главную страницу сайта (рисунок 1.11).

Shema

1.11 — Код добавления логотипа на страницу.

Shema

1.12 — Логотип технологии SVG и формата PNG.

– Следующим шагом будет создание навигации на сайте. Стиль навигации уже прописан в CSS файле. Вам осталось добавить ссылки между тегоми nav. В конце добавим div clearfix. Clearfix — метод отмены действия float без изменения структуры HTML-документа (рисунок 1.13).

Shema

1.13 — Код ссылок для вставки навигации

– Добавьте копирайт в подвал сайта между тегами footer (рисунок 1.14).

Shema

1.14 — Добавлены meta и link данные

– Дизайн готов. Добавим обзац с текстом Контент, для визуального восприятия области для контента.

Shema

1.15 — Выделеные области нужно добавить на свою страницу.

Поздравляем! Вы создали свою первую веб-страницу на HTML5 (рисунок 1.16): добавили текст и цвета, добавили изображения и подключили CSS, а также быстро создали профессиональную веб-страницу. Вы выполнили предварительный просмотр страницы в браузере (рисунок 1.16).

lab1_16

1.16 — Предварительный просмотр веб-страницы

Контрольные вопросы

1. Какой редактор используется в уроках для редактирования страниц HTML5?
2. Между какими тегами размещается пара тегов ?
3. Какой метатег сообщает браузеру, что сайт предназначен для просмотра как на персональных компьютерах, так и на мобильных устройствах?
4. При добавлении логотипа была использована технология SVG, что будет отображаться браузером, если браузер не поддерживает SVG?
5. Между какими тегами распологаются ссылки навигационного меню сайта?

Создание сайта на HTML5

  • Урок 1. Начало работы с Visual Studio Code. Создание дизайна страниц
  • Урок 2. Создание главной страницы сайта
  • Урок 3. Создание страницы «Услуги и цены»
  • Урок 4. Создание страниц «Гражданам», «Юридическим лицам»
  • Урок 5. Создание страницы «Вопросы-ответы»
  • Урок 6. Создание страницы «Контакты»
  • Установка Visual Studio Code

Раздел 6. Основы создания Web сайтов на С# в Visual Studio 2005/2008

Создание Web приложений и Web-сервисов в Visual Studio 2005 основано на использовании технологии ASP.NET, прообразом которой была технология ASP. Технология ASP появилась в 1997 году и предназначалась для построения web-страниц в Internet Information Server(IIS). В сценариях ASP HTML-код объединялся со сценарным кодом, интерпретируемым IIS в ответ на запросы со стороны клиента. В результате строилась страница HTML, которая возвращалась клиенту.

Технология ASP.NET (Active Server Pages .NET) позволила устранить ряд недостатков, присущих ASP (ровно, как и многим другим технологиям создания Web приложений), прежде всего, за счет вывода кода из HTML-страницы в отдельный исполняемый модуль, откомпилированный для среды .NET.

Если ASP представляла собой ISAPI DLL, с набором компонентов и несколькими системными файлами, то ASP.NET — стала частью платформы .NET. Напомним, что в NET используется Intermediate Language — общий промежуточный язык, в который компилируется любой код, независимо от исходного языка программирования. Это готовый к выполнению в среде .NET Framework код. Платформа .NET интерпретирует Intermediate Language и обеспечивает взаимодействие с операционной системой. Кроме того, .NET предоставляет интерфейс приложениям ASP.NET. ASP.NET, в свою очередь, предоставляет интерфейс Web-формам (страницам ASP.NET) и Web-службам. Такое многоуровневое построение позволяет стандартизировать обращение к системным вызовам для Windows и Web, что позволило создать единую методику и среду для разработки Windows программ, Web сайтов, сервисов, библиотек и т.п.

Таким образом, вторым преимуществом ASP.NET стало объединение методики разработки приложений для Web и для Windows. А унификация используемых языков разработки Web сайтов и Windows программ, применение единой среды разработки и отладки, во многом единых или схожих по свойствам элементов управления (controls или контролов), пространств имен (библиотек) и т.д. — сделало новую технологию самой популярной на данный момент.

С точки зрения работы сети обмен данными с web-сервисами проходит по TCP через 80 порт и с использованием стандартного метода POST протокола http.

Параграф 1.2. Где и как разрабатывать Web сайты

Web приложение ASP.NET выполняется на специальных Web серверах, на которых функционируют встроенные информационные службы Интернета — Internet Information Services (IIS). IIS поддерживают доступ по протоколам FTP и HTTP и все, что необходимо клиенту для доступа к Web содержимому сервера.

запустить IIS Manager (как правило, в группе Administrative Tools);

в контекстном меню узла «Web Sites» («Web узел по умолчанию») выбрать пункт меню «Properties»;

в появившемся окне свойств выбрать закладку «Home Directory» («Домашний каталог»);

в группе «Application Settings» нажать кнопку «Configurations:» («Настройка»);

В списке «Application Extensions» («Расширения») будут указаны все ISAPI-расширения IIS, установленные на текущий момент. Для расширения .aspx и нескольких других (.asax, .ascx, .ashx, .asmx, .axd, .config, .cs, .csproj, .java, .jsl, .licx, .rem, .resources, .resx, .soar, .vb, .vbproj, .vsdisco, .webinfo), зарегистрирован один исполняемый файл aspnet_isapi.dll. Предполагается, что на компьютере установлен IIS, а после него — .NET Framework, при другой последовательности установки ISAPI-некоторые расширения, возможно, не будет зарегистрированы.

aspnet_isapi.dll обеспечивает обработку запросов ASP.NET и создания рабочих процессов aspnet_wp.exe, выполняющих запросы (aspnet_wp.exe — процесс, в котором, собственно, и работает ASP.NET, в Windows 2003 этот процесс носит имя — w3wp.exe).

Получив такой запрос, расширение проверяет настройки в секции конфигурационного файла machine.config, находящегося в каталоге «%SystemRoot%\Microsoft.NET\Framework\v%CLRVersion%\CONFIG. Если уже существующий процесс aspnet_wp.exe не удовлетворяет хотя бы одному требованию, указанному в настройках, то aspnet_isapi.dll создает новый процесс с требуемыми настройками. При этом старый рабочий процесс продолжает существовать до окончания обработки выполняемых запросов, после чего удаляется. Таким образом, в любом случае, выполнение Web приложения будет осуществляться в среде IIS.

В ASP.NET 1.0 разработчик сайта, использующий ASP.NET, должен был иметь непосредственный доступ к серверу приложений и его файловой системе. Эта же возможность осталась и в ASP.NET 2.0, хотя стала наименее используемой разработчиками. Для обеспечения доступа к нужному каталогу файловой системы требовалось создать сетевое подключение, например, так. Откроем на панели Windows службу «Мой компьютер», в меню «Сервис» выберем пункт «Подключить сетевой диск». Найдем свободную букву, например «W», нажимаем кнопку «Обзор». Выбираем сетевое имя каталога сервера приложений, в котором будем вести разработку (естественно он должен быть открыт для Вас), ставим галочку «Восстанавливать при входе в систему» и нажимаем кнопку «Готово». Пусть каталог разработки будет:

\\Frameworks\pub - где Frameworks имя сервера, pub виртуальная директория Web сайта по умолчанию

В любом файловом менеджере (Проводник, Far, Windows Commander ..) в Frameworks\dev (на нашем диске «W») создаем директорию с именем нашего будущего решения, например «MySite1».

Далее, нам потребуется превратить реальный каталог в виртуальный и создать пул для приложения (поскольку эта часть не утратила актуальности, речь об этом пойдет ниже в параграфе «Развертывание Web сайтов на сервере»). С этого момента можно стартовать Visual Studio 2005 и приступать к созданию сайта на сервере.

В Visual Studio 2005 описанный выше путь стал не единственным, и, мало того, новая студия позволила создавать Web приложения вообще без использования IIS и на локальном компьютере (к IIS мы вернемся только при развертывание Web сайта, но это будет после того, как сайт создан и полностью отлажен). Иными словами, при разработке Web сайта на сервере мы предварительно выполняем настройку каталога сайта, а при разработке на локальном компьютере — при развертывании сайта.

Параграф 1.3. Создания Web сайта на локальном компьютере

Для обеспечения возможности создания сайтов на локальном компьютере без использования IIS в Visual Studio 2005 имеется собственный Web-сервер (версия бесплатного сервера Cassini).

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

Запустим Microsoft Visul C# Net и создадим новый Web сайт, как показано это на Рис.1. (Fole/New/Web Site).

В окне Templates диалогового окна «New Web Site» задаем «ASP.NET Web Site». В окне» Location» выбираем File System, с помощью кнопки Browse определяем папку, где будем создавать все наши сайты. В выбранной папке будет создана новая папка с именем нашего сайта (WebSite1 для Рис.1.). Не забудем выбрать Language и нажимаем «OK». Сайт создан

Рис.1. Создание ASP.NET Web сайта

Сайт на данном этапе представляет собой два файла (Рис.2.): Default.aspx и Default.aspx.cs. Файл Default.aspx определяет HTML содержимое сайта, а Default.aspx.cs — программный код, который отделен от HTML содержимого и предназначен для программного формирования данного содержимого или выполнения каких либо иных действий на сервере. Эта связь определена в директиве Page через свойство CodeFile.

CodeFile="Default.aspx.cs" Inherits="_Default" %>

Рис.2. ASP.NET решение Web сайта

Рассмотрим связанный код файла Default.aspx.cs:

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page < protected void Page_Load(object sender, EventArgs e) < >>

Код состоит из одного класса _Default, наследника класса System.Web.UI.Page. Имя класса также присутствует в директиве Page файла Default.aspx — Inherits=»_Default»;

Для того, чтобы убедиться, что это Web сайт, нажмем кнопочку F5(меню Debug\Start Debugging). Отладчик предложит создать файл Web.config, после подтверждения согласия стартует локальный Web Server, иконка которого помещается в системный трэй, а решение отобразится в Web Browser(Рис.3.).

Рис.3. Выполнение ASP.NET сайта

Параграф 1.4. Жизненный цикл страницы

И хотя наш сайт пуст, но он уже «ведет насыщенную жизнь». Для того, чтобы убедиться в этом, добавим в директиву Page свойство Trace=»true» (Директива Page имеет множество свойств, о которых мы будем вести речь по мере их востребования). Вновь нажимаем F5. Результат показан на Рис.4.

Рис.4. Жизненный цикл страницы

Мы видим множество событий, которые произошли при отображении даже пустой страницы. При создании страницы одно из событий (Load) оформляется как метод класса (Page_Load). Однако разработчику доступны и еще четыре события: PreInit, Init, PreRender, Unload. Для каждого из них в класс может быть включен метод его обработки. Кроме того, разработчику будут доступны и события дочерних элементов управления, которые возникают между событиями Load и PreRender страницы. Это следует хорошо запомнить (к этому мы вернемся в следующем параграфе).

Параграф 1.5. Добавление функциональности сайту

На данном этапе наш сайт работоспособен. Добавим на сайт несколько контролов. В окне дизайнера формы (вкладка Designe файла Default.aspx) или на вкладку Source (в отличие от Visual Studio 2003) мы можем перетащить доступные визуальные контролы из окна Toolbox с любой его вкладки, например, Button и Label с вкладки Standart(Рис.5.).

Рис.5. Добавление контролов на сайт

После добавления контрола можно посмотреть и установить его свойства, воспользовавшись его контекстным меню и вызвав окно свойств (пункт Properties) или задать события для обработки, перейдя на вкладку Events окна Properties и кликнув мышкой в окошечке рядом с именем события. Напомним, что двойной клик по самому контролу вызывает его наиболее часто (по мнению разработчиков) востребованное событие (для кнопки это OnClick и обработчик события Button_Click).

В файле Default.aspx.cs добавим (напишем по образцу метода Page_Load) методы Page_PreInit, Page_Init, Page_PreRender, Page_Unload. Создадим событие Button1_Click, Button1_Init, Button1_Load, Button1_PreRender, Button1_Unload (методы для обработки событий пишутся для страницы, а для контролов создаются, а не пишутся, иначе в файле Default.aspx контрол будет не связан с событием).

Файл Default.aspx (его содержимое между тэгами Body) примет вид:

  
EnableViewState="true"> OnClick="Button1_Click" OnInit="Button1_Init" OnLoad="Button1_Load" OnPreRender="Button1_PreRender" OnUnload="Button1_Unload" />

Наполним содержанием методы событий. Поставим целью показать не только возможности вывода текста на страницу, но и возможности изменения свойств элементов управления на различных этапах жизненного цикла страницы. Будем исследовать свойство Text элемента управления Label. Для контрола Label сначала установим свойство EnableViewState в true (по умолчанию), а затем в false и проанализируем результаты функционирования кода.

private void Page_PreInit(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text = ""; Label1.Text += "Вызов метода Page_PreInit при первой загрузке..
"; > else < Label1.Text = ""; Label1.Text += "Вызов метода Page_PreInit при повторной загрузке страницы.
"; > > private void Page_Init(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text += "Вызов метода Page_Init при первой загрузке страницы.
"; > else < Label1.Text += "Вызов метода Page_Init при повторной загрузке страницы.
"; > > protected void Button1_Init(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text += "Вызов метода Button1_Init при первой загрузке страницы.
"; > else < Label1.Text += "Вызов метода Button1_Init при повторной загрузке страницы.
"; > > private void Page_Load(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text += "Вызов метода Page_Load при первой загрузке.
"; > else < Label1.Text += "Вызов метода Page_Load при повторной загрузке.
"; > > protected void Button1_Load(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text += "Вызов метода Button1_Load при первой загрузке страницы.
"; > else < Label1.Text += "Вызов метода Button1_Load при повторной загрузке страницы.
"; > > protected void Button1_Click(object sender, System.EventArgs e) < Label1.Text += "Вызов метода Button1_Click.
"; > private void Page_PreRender(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text += "Вызов метода Page_PreRender при первой загрузке страницы.
"; > else < Label1.Text += "Вызов метода Page_PreRender при повторной загрузке страницы.
"; > > protected void Button1_PreRender(object sender, EventArgs e) < if (!IsPostBack) < Label1.Text += "Вызов метода Button1_PreRender при первой загрузке страницы.
"; > else < Label1.Text += "Вызов метода Button1_PreRender при повторной загрузке страницы.
"; > > private void Page_Unload(object sender, System.EventArgs e) < Label1.Text += "Этого Вам не видать никогда:
"; Label1.Text += "Вызов метода Page_Unload - страница загружена, изменить ничего нельзя.
"; > protected void Button1_Unload(object sender, EventArgs e) < Label1.Text += "Этого Вам не видать никогда:
"; Label1.Text += "Вызов метода Button1_Unload - страница загружена, изменить ничего нельзя.
"; >

Свойство страницы IsPostBack равно false только при первом вызове страницы.

Выполним решение (F5), результат показан на Рис.6.

Рис.6. События жизненного цикла страницы и их влияние на свойства элементов

Событие PreInit фиксирует этап начала персонализации и формирования страницы в целом. У дочерних элементов это событие не возникает. В обработчике Page_PreInit можно устанавливать шаблоны и темы оформления, изменять свойства элементов. При повторном вызове страницы обработчик данного события также вызывается, но его действие не изменит свойства элементов, у которых установлено свойство EnabledViewState в true.

Событие Init — начало рекурсивной инициализации содержания дочерних элементов страницы. Событие Init дочерних элементов вызывается ранее события Init страницы. Для событий Init дочерних элементов могут быть созданы собственные обработчики события (например, Button1_Init). В Page_Init возможно считывать и инициализировать свойства всех дочерних элементов. При повторном вызове страницы обработчики данного события также вызывается, но их действие, как и в PreInit, не изменит свойства элементов, у которых установлено свойство EnabledViewState в true.

Событие Load возникает как для страницы, так и для дочерних элементов. События дочерних элементов возникают позже чем событие загрузки страницы (в отличии от событий Init). На этом этапе доступны все свойства элементов управления, не зависимо от свойства EnableViewState.

Событие PreRender возникает тогда, когда начинается проверка создания всех элементов страницы. Это последняя возможность внести изменения в свойства страницы и ее элементов.

Параграф 1.6. Установка Web сайта на сервер

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

Настройка функционирования сайта на локальном компьютере во многом схожа с настройкой его функционирования на сервере приложений и проходит ряд этапов.

Этап 1. Публикация сайта

Сайт перед развертыванием должен быть опубликован — то есть, исполняемый модуль должен быть превращен в dll, а файл странички Default.aspx получить ссылку на эту dll. Сайт перед развертыванием должен быть опубликован — то есть, исполняемый модуль превращен в dll, а страничка aspx получить ссылку на эту dll. Для публикации сайта создадим какой либо каталог (поближе к корню жесткого диска, например C:\MySite_1). Последовательно выполним в меню Visual Studio подпункт Rebuild Web Site пункта Build, а затем подпункт Publish Web Site. В появившемся окне Publish Web Site (Рис.7.) пишем или выбираем C:\MySite_1. Нажимаем кнопочку OK. Сайт опубликован (Рис.7.). Он состоит из нашего файла Default.aspx, файла Web.config (к этому файлу мы не раз еще вернемся), необязательного для сайта файла PrecompiledApp.config и библиотеки со случайным именем.

Рис.7. Публикация Web сайта

Обратим внимание на то, что файл Default.aspx остался таким же, как мы его создали. Изменилась только директива Page — в ней добавилась ссылка на библиотеку класса.

Этап 2. Настройка IIS для работы с сайтом

Для функционирования Web сайтов на Вашем локальном компьютере (не только данного сайта) должна быть установлена служба IIS. Если для выхода в Интернет используется прокси-сервер (на домашних компьютерах прокси для этого никогда не используется), может потребоваться настроить Internet Explorer так, чтобы обходить прокси-сервер (например, так, как показано на Рис.8.).

Рис.8. Настройка Internet Explorer

IIS при установке Windows обычно по умолчанию не устанавливаются. Установить IIS или выбрать дополнительные компоненты можно с помощью приложения «Установка и удаление программ» панели управления Windows. Чтобы установить IIS, добавить или удалить компоненты, нажимаем кнопку «Пуск», «Настройка», выбираем «Панель управления», «Установка и удаление программ». Открываем вкладку «Добавление и удаление компонентов Windows» и ставим галочку напротив Internet Information Serveces (IIS) — Рис.9.

Рис.9. Установка IIS

Далее следуем появляющимся на экране инструкциям для установки, удаления или добавления компонентов IIS.

После установки программы на компьютере создаются следующие каталоги с пользовательским содержимым:

\Inetpub \корневой_каталог_системы\Help\iisHelp \корневой_каталог_системы\system32\inetsrv

Вы работаете в Visual Studio и на Вашем компьютере Net Framework был установлен вместе со студией.

Если Вы устанавливаете сайт на другом компьютере, то вам придется выполнить установку Net Framework. В Windows Vista Net Framework должен быть предустановлен, ровно как и в Widdows XP с Servis Pak 2, для остальных Windows потребуется установить дистрибутивный пакет Microsoft .NET Framework 2.0, который устанавливает среду .NET Framework и связанные с ней файлы, необходимые для запуска приложений, созданных для работы в среде выполнения .NET Framework 2.0.

Все необходимое можно скачать бесплатно с сайта Microsoft и более близких ссылок: Ссылка 1, Ссылка 2, Ссылка 3. В любом поисковике наберите «Microsoft .NET Framework скачать» и Вы найдете еще множество ссылок и инструкций по установке (хотя они и не требуются, пакет устанавливается как обычная программа).

Этап 3. Проверка работоспособности

Для проверки работоспособности IIS набираем в браузере (в Explorer):

http://localhost/localstart.asp или вместо localhost имя компьютера, например: http://wlad/localstart.asp

Если все настройки Windows правильны, то в браузере должны отобразиться страницы:

http://localhost/localstart.asp http://localhost/iishelp/iis/misc/default.asp

Теперь можно страницы ASP просто копировать в папку.

C:\Inetpub\wwwroot\имя_файла.asp

Доступ к файлу из браузера

http://localhost/имя_файла.asp

Если проверка пройдет неудачно, проверьте настройки ISS (кнопка «Пуск», «Настройка», выбираем «Панель управления», «Администрирование», «Internet Information Services», развертываем в дереве компьютера «Веб-узел по умолчанию») и, в контекстном меню «Веб-узел по умолчанию», выбираем пункт «Свойства». На вкладке «Домашний каталог» и

Рис.10. настройки ISS

вкладке ASP.NET (Рис 2.4) устанавливаем настройки, показанные на рисунках.

Рис.11. настройки ISS

Для развертывания программы потребуется еще одно действие — создание виртуального каталога для программы.

Этап 4. Установка сайта на локальный сервер

Скопируйте всю директорию C:\MySite_1 с нашим сайтом в каталог C:\Inetpub\wwwroot\ (именно сюда).

Вновь запустите IIS (кнопка «Пуск», «Настройка», выбираем «Панель управления», «Администрирование», «Internet Information Services», развертываем в дереве компьютера «Веб узел по умолчанию»). В его дереве появилась папка MySite_1. Осталось превратить ее в виртуальный каталог. На вкладке «Каталог», даем права данному приложению и нажимаем кнопку «Создать».

Рис.12. Создание виртуального каталога

Доступ к тексту сценариев (Scripts Source Access) — разрешает выполнение ASP.NET файлов.

Чтение (Read) — IIS дает доступ пользователю к запрошенному ASP файлу каталога. Предоставление этого права не дает пользователю права на чтение конфигурационных файлов ASP NET, а отсутствие этого права запрещает доступ и к другим типам файлов (например, HTML и любым не ASP NET файлам).

Запись (Write) — разрешение на запись в каталог.

Выполнение (Execute) — разрешение на запуск других исполняемых файлов (например, ISAPI и CGI).

Запись в журнал (Log Visits) — разрешение на запись в журнал.

Обзор каталогов (Directory Browsing) — разрешение на просмотр файлов каталога.

Проверяем установки на вкладках «Каталог», «Документы» и «ASP.NET» (Рис.13.) и нажимаем кнопку «OK».

Рис.13. Создание виртуального каталога для папки MySite_1

Обратим внимание на изменившийся вид папки MySite_1 — этот вид соответствует виртуальным каталогам и к ним можно обращаться по URL (Рис.14.).

Рис.14. Виртуальный каталог MySite_1.

Набрав в Explorer следующую строку, мы вызываем программу, она выполняет то, что презентовано выше.

http://localhost/MySite_1
Этап 5. Установка сайта на сервер приложений

Установка сайта на сервер приложений практически нечем не отличается от установки приложения на локальную машину. Скопируйте всю директорию C:\MySite_1 с нашим сайтом в каталог Веб узла по умолчанию сервера приложений. Для этого у вас должен быть соответствующий доступ к этому каталогу и IIS удаленного сервера. После этого сделайте каталог MySite_1 виртуальным, как мы делали выше. Единственное отличие на серверах приложений обычно требуется выбрать Application pool, который должен быть ASP.Net.2 (Рис.15.). Если вы сами разворачиваете сервер приложений, то возможно Вам придется его создать через контекстное меню узла Application Pools (Рис 16).

Рис.15. Виртуальный каталог MySite_1 на сервере приложений

Рис.16. Создание Application Pool для приложения

Глава 2. Подготовка setup файлов и инсталляция web сайтов

На данном этапе у нас есть решение, созданное на локальной машине в директории C:\SamplesASP\WebSite1, виртуальная директория для решения MySite_1 (C:\Inetpub\wwwroot\MySite_1). Мы можем воспользоваться заделом или создать новый сайт.

Изменим решение, убрав из него все лишнее, и вновь поместим на форму контрол Label и Button:

Наполним сайт содержанием:

private void Page_Load(object sender, System.EventArgs e) < if (!IsPostBack) < Label1.Text = "Hello World Visual Studio 2005!"; >> protected void Button1_Click(object sender, EventArgs e)

Вызываем для решения Solution Explorer (View/Solution Explorer) и в самой верхней строчке решения вызываем контекстное меню пункт Add, выбираем пункт New Project. В открывшемся окне Add New Priject выбираем Project Types Setup and Deployment Projekts и Templates Web Setup Project, Name выбираем любое. Location также не имеет существенного значения — это где будут находиться файлы Setup (Рис.17,18.).

Рис.17. Создание проекта инсталляции

Рис.18. Создание проекта инсталляции

В окне File System (MySite1) добавляем через контекстное меню Web Application Folder, пункт Add/Project Output Content Files (рис 19.).

Рис.19. Создание проекта инсталляции

Для Web Application Folder вызываем контекстное меню, выбираем пункт Properties Window и можем поменять директорию установки на сервере — пункт Virtual Directory — изменим на созданную нами виртуальную директорию MySite_1 (Рис.20.).

Рис.20. Создание проекта инсталляции

Вызываем контекстное меню в Solution Explorer для узла MySite1 и выполняем пункт Rebuild (Перед этим необходимо выполнить Build/Rebuild Solutation в режиме Release).

Инсталляционные файлы находятся по адресу заданному нами в Location (Рис.18.) в директории Release. Это файлы MySite1.msi и setup.exe.

Стираем все из директории C:\Inetpub\wwwroot\MySite_1\ и выполняем установку, запустив на выполнение файл setup.exe. Согласившись со всеми настройками, мы закончим установку приложения. Вызываем сайт:

http://localhost/MySite_1

Аналогично можно поступить и на сервере приложений. Копируем файлы MySite1.msi и setup.exe. в любую директорию сервера приложений и выполняем установку, запустив на выполнение файл setup.exe (естественно на сервере) или MySite1.msi. Согласившись со всеми настройками, мы закончим установку приложения. Вызываем страничку из браузера:

http://frameworks/MySite_1 frameworks - имя сервера

Глава 3. HTML и Web контролы и их использование

3.1. HTML и Web контролы

Для уяснения разницы в использовании контролов вкладок HTML и Standart добавим в созданный выше проект два контрола Button — один с вкладки HTML, другой с вкладки Standart. Зададим соответствующие надписи на кнопках, чтобы можно было их различить, и рассмотрим HTML код в файле .aspx. Кнопка с вкладки Standart (Button1), в отличие от кнопки с вкладки HTML, имеет ID для идентификации событий на сервере, выражение runat=»server» в задании кода также говорит о ее назначении для серверной обработки событий. Кнопка с вкладки HTML является аналогом кнопки HTML документа и может быть использована соответствующим образам (например для запуска скриптов формы и т.п.).

HTML контролы могут быть преобразованы в так называемые, серверные элементы управления (HTML Server Controls) — серверные аналоги стандартных элементов HTML. Для преобразования достаточно вызвать контекстное меню для этого контрола и указать для него режим «Run as Server Control».

В большинстве HTML-редакторов, например, FrontPage, серверные элементы управления будут не видны. Перед Web-дизайнерами встает вопрос: воспользоваться средствами программирования NET или средствами Web-дизайна HTML-редакторов, к которым они привыкли. В тоже время Microsoft, в настоящее время, создала свои средства визуальной разработки (Visual Web Developer 2005), а, учитывая, что продукты фирмы имеют один из самых больших секторов на компьютерном рынке, то следует ожидать и поддержку Net от разработчиков других фирм.

Серверные элементы управления могут быть представлены множеством тегов (например DataGrid) и программист не должен знать (может и не знать) многие тонкости языка HTML — многофункциональный пользовательский интерфейс Web контролов снимает с программиста множество рутинных функций. Кроме того, исключаются неоднозначности в сформированном входном и выходном HTML коде (поле ввода в HTML, к примеру, может быть представлено и как тег textarea и как тег input type=»text»).

Если серверный и HTML контрол выполняют одинаковую функцию отправки информации на сервер (например, из текстового поля), то серверный контрол сохранит эту информацию (если обработчик какого либо события не изменит ее), а информация в HTML контроле будет стерта после отправки.

Серверные элементы имеют возможность корректировать код (подстраиваться) под тип браузера.

Перечисленное выше говорит о предпочтительности использования серверных контролов.

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

  Untitled Page  

Данный код, в отличии от исходного в файле aspx, не имеет уже выражения runat=»server» (браузеру нет смысла его интерпретировать), но появилось дополнительное скрытое поле (input type=»hidden») — это поле хранит информацию о состоянии (name=»__VIEWSTATE» ) всех серверных элементов управления.

3.2. Динамическое создание таблиц и работа с ними

Как пример использования серверных Web контролов имеющих аналог среди HTML контролов, рассмотрим динамическое создание таблиц. Этот пример призван показать богатство возможностей серверных контролов по сравнению с их «младшими братьями».

Для динамического создания таблиц в пространстве имен System.Web.UI.WebControls имеются ряд классов, основные из которых: HtmlTable, HtmlTableRow, HtmlTableCell, HtmlTableCellCollection, HtmlTableRowCollection

В Visual Studio реализована поддержка простой модели таблицы. Это означает, что нельзя динамически создать , , , , , элементы.

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

Ниже приведен пример динамического создания таблицы, вывода в ячейки созданной таблицы информации и элементов управления, которые так же создаются динамически. Кроме того, показан пример использования событий динамически созданных и добавленных в ячейки таблицы элементов управления. На форме решения web сайта размещены три контрола: PlaceHolder, Label (id=Label11) и Button. Результаты работы кода представлены на Рис.21. Ряд пояснений даны в коде примера.

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Drawing; public partial class _Default : System.Web.UI.Page < protected void Page_Load(object sender, EventArgs e) < Label11.Text = ""; //При использовании IsPostBack таблица отобразится только //при начальной загрузке страницы //if(!IsPostBack) //< CreateTable(); //>> private void CreateTable() < //Классы для работы с таблицей HtmlTableRow row=null; HtmlTableCell cell=null; HtmlTable table1 = null; //Создаем таблицу table1 = new HtmlTable(); table1.Attributes.Add("runat", "server"); table1.Attributes.Add("width", "99%"); table1.ID = "t1"; table1.Border = 2; table1.CellPadding = 3; table1.CellSpacing = 3; table1.BorderColor = "Brown"; //Первая строка заголовка row = new HtmlTableRow(); row.Attributes.Add("runat", "server"); row.Attributes.Add("rowspan", "2"); row.ID = "r1"; //В первой ячейке заголовка текст cell = new HtmlTableCell("th"); cell.Attributes.Add("runat", "server"); cell.Attributes.Add("align", "center"); cell.ID = "th1"; cell.Attributes.Add("colspan", "2"); cell.Attributes.Add("rowspan", "2"); cell.InnerHtml = "Заголовок в тэге"; cell.Attributes.Add("style", "color:green"); row.Cells.Add(cell); //Во второй ячейке заголовка Label cell = new HtmlTableCell("th"); cell.Attributes.Add("runat", "server"); cell.Attributes.Add("align", "center"); cell.Attributes.Add("style", "color:blue"); cell.Attributes.Add("rowspan", "2"); cell.ID = "th2"; cell.Attributes.Add("colspan", "2"); Label label1 = new Label(); label1.Text = "Заголовок в Label"; label1.Attributes.Add("runat", "server"); label1.ForeColor = Color.Brown; label1.ID = "L1"; cell.Controls.Add(label1); row.Cells.Add(cell); //Во третьей ячейке заголовка TextBox cell = new HtmlTableCell("th"); cell.Attributes.Add("runat", "server"); cell.Attributes.Add("align", "center"); cell.Attributes.Add("style", "color:darkred"); cell.Attributes.Add("colspan", "2"); cell.ID = "th3"; TextBox textBox = new TextBox(); textBox.Text = "Заголовок в TextBox"; textBox.Attributes.Add("runat", "server"); textBox.Attributes.Add("style", "width: 95%"); textBox.ID = "TB1"; cell.Controls.Add(textBox); row.Cells.Add(cell); //Добавляем строку в таблицу table1.Rows.Add(row); //Строка 2 заголовка row = new HtmlTableRow(); row.Attributes.Add("runat", "server"); row.ID = "r2"; //В первой ячейке второй строки или четвертой ячейке заголовка DropDownList cell = new HtmlTableCell("th"); cell.Attributes.Add("runat", "server"); cell.Attributes.Add("align", "center"); cell.ID = "th4"; DropDownList dropDownList1 = new DropDownList(); dropDownList1.Items.Add("DropDownList"); dropDownList1.Items[0].Value = "0"; dropDownList1.Items.Add("шампанское"); dropDownList1.Items[1].Value = "1"; dropDownList1.Items.Add("дичь"); dropDownList1.Items[2].Value = "2"; dropDownList1.ID = "DDL1"; dropDownList1.Attributes.Add("runat", "server"); dropDownList1.Attributes.Add("style", "width:95%"); //Для обработки событий контрола слоздаем EventHandler dropDownList1.AutoPostBack = true; dropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged); cell.Controls.Add(dropDownList1); //Добавление ячейки к строке заголовка row.Cells.Add(cell); //Добавление строки в таблицу table1.Rows.Add(row); //Формируем ячейки и заполняем их информацией for (int i = 1; i table1.Rows.Add(row); > //Можно добавлять таблицу в форму //form1.Controls.Add(table1); //Можно добавлять таблицу в контейнер PlaceHolder1.Controls.Add(table1); > //Обработка события элемента DropDownList protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) < DropDownList ddl = (DropDownList)sender; Label11.Text = "Шеф, я заказал ему : " + Convert.ToString(ddl.Items[ddl.SelectedIndex]); //Используем поиск таблицы по номеру (можно по ID используя FindControl) int viI = iGetControlsTable(); HtmlTable table1 = null; if (viI != -1) < //Вывод информации в ячейку table1 = PlaceHolder1.Controls[viI] as HtmlTable; HtmlTableCell cell = table1.Rows[2].Cells[2]; cell.InnerHtml = Convert.ToString(ddl.Items[ddl.SelectedIndex]); cell.Attributes.Add("style", "color:red"); >> //Функция поиска таблицы private int iGetControlsTable() < int viI = -1; for (int i = 0; i < PlaceHolder1.Controls.Count; i++) < if (PlaceHolder1.Controls[i] is HtmlTable) < viI = i; break; >> return viI; > //Ввод и чтение информации в/из ячеек protected void Button1_Click(object sender, EventArgs e) < int viI = iGetControlsTable(); HtmlTable table1 = null; if (viI != -1) < table1 = PlaceHolder1.Controls[viI] as HtmlTable; HtmlTableCell cell = table1.Rows[3].Cells[3]; cell.InnerHtml = "Новые данные в ячейке"; cell.Attributes.Add("style", "color:red"); HtmlTableCell cell1 = (HtmlTableCell)(table1.FindControl("td55")); HtmlTableCell cell2 = (HtmlTableCell)(table1.FindControl("td54")); HtmlTableCell cell3 = (HtmlTableCell)(table1.FindControl("td53")); DropDownList ddl = (DropDownList)(table1.FindControl("DDL1")); if (ddl != null && cell1 != null) < cell1.InnerHtml = Convert.ToString(ddl.Items[ddl.SelectedIndex]); cell1.Attributes.Add("style", "color:red"); cell3.InnerHtml = "В ячеке 5:4: " + cell2.InnerHtml; cell3.Attributes.Add("style", "color:red"); >> > >

Рис.21. Пример работы с динамически созданной таблицей

Глава 4 Управление состоянием Web приложений

Параграф 4.1. Использование VIEWSTATE

Ранее мы отмечали, что код файла aspx. после первого вызова страницы с сервера, в отличии от исходного, уже не имеет свойства runat=»server» (браузеру он не нужен), но содержит дополнительное скрытое поле (input type=»hidden») — это поле хранит информацию о состоянии (name=»__VIEWSTATE» ) всех серверных элементов управления (на самом деле VIEWSTATE хранит не саму информацию, а дельты между значениями, которые присвоил сервер информационным полям элементов управления перед выдачей страницы клиенту и значениями, полученными перед очередным отображением страницы). Если добавить в директорию Page (как мы это уже делали) Trace=»true», то можно просмотреть вид и объем информации, передаваемой сервером (Рис.22.).

Рис.22. VIEWSTATE и объем передаваемой информации

Имеется возможность запретить использование __VIEWSTATE как для страницы целиком, так и для отдельных элементов, используя свойство EnableViewState, которое имеется и у директории Page, и у многих контролов.

Разработчик может хранить в VIEWSTATE и свою информацию, например, число ошибок допущенных при тестировании (в директиве Page EnableViewState должно быть true).

private void Button1_Click(object sender, System.EventArgs e) < bool fError=true; int viNumError=0; //Здесь проводится анализ ответа, если результат верен, то fError будет установлен в false; . if(ViewState["Error"] == null) < viNumError=0; ViewState["Error"]= "0"; >else < viNumError=Convert.ToInt32(ViewState["Error"]); >if(fError) < viNumError++; ViewState["Error"]=viNumError.ToString(); >Label1.Text="Допущено ошибок: "+viNumError.ToString(); >

В приведенном примере значение переменной viNumError после отсылки страницы на сервер и ее возврата клиенту не сохраняется. VIEWSTATE помогает поместить ее значение в поле сохранения и восстановить при загрузке страницы. Этот механизм достаточно удобен при работе на одной страницы. Переход на другую страницу сайта (например, Response.Redirect(«Default2.aspx»)) и последующий возврат на исходную, ведет к потере сохраненных значений. Кроме того, VIEWSTATE текущей страницы недоступно странице, на которую будет выполнен переход.

Параграф 4.2. Передача информации между страницами сайта

4.2.1. Использование URL

Существует несколько способов передачи данных между страницами. Самый простой — включить значение переменной в URL(строку запроса) вызываемой страницы. Передаваемые данные должны следовать за URL вызываемой страницы после вопросительного знака. Данные включаются по принципу «имя-значение» и разделяются знаком &.

Для демонстрации данной возможности, добавим в решение еще одну Web страничку ()

Response.Redirect("Default2.aspx?Text=\"Сдано\"&NError="+(string)ViewState["Error"]);

URL вызова будет:

http://localhost:1545/WebSite1/Default2.aspx? Text="%d0%a1%d0%b4%d0%b0%d0%bd%d0%be"&NError=4

Этот метод имеет как свои преимущества (нет дополнительной нагрузки на сервер, высокая скорость передачи данных), так и недостатки (открытость и незащищенность информации, ограниченность объема — предельная длина URL обычно 1-2кб и ограниченный набор символов, допустимых в URL.

Для приема данных используется метод QueryString класса Request.

string s=Request.QueryString["Text"];

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

private void Button2_Click(object sender, System.EventArgs e)

По нажатии кнопки 2 будет не только вызвана страничка WebForm2.aspx, но и передан наш текст в Label.

Еще одна возможность передачи данных в URL — передача и получение информации о контроле, который вызвал Redirect на страницу. Пусть у нас несколько событий нажатия кнопок замкнуты на один обработчик, например Button1_Click. Тогда мы можем передать информацию страничке на которую переходим следующим образом:

private void Button2_Click(object sender, System.EventArgs e) < Response.Redirect("WebForm2.aspx" + "?Text Text"]) < case "Button1": Label1.Text="Я вызвана по кнопке 1"; break; case "Button2": Label1.Text="Я вызвана по кнопке 2"; break; . >>
4.2.2 Использование cookie

Cookie(печенье) — небольшие файлы, создаваемые на жестком диске или в памяти браузера машины клиента, позволяющие Web серверам хранить в них информацию.

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

Для получения доступа к cookie в приложении должна быть подключено пространство имен:

using System.Net;

Для работы с cookie используется классы Request и Response. Следующий пример демонстрирует создание и использование cookie. На форме решения поместим три контрола: Button, Label и TextBox. В обработчиках событий запишем следующий код:

protected void Page_Load(object sender, EventArgs e) < Button2.Visible = false; HttpCookie MyCookie; //Выбираем значения cookie MyCookie = Request.Cookies["MySite1"]; if (MyCookie == null) < //Создаем объект класса cookie MyCookie = new HttpCookie("MySite1"); //Устанавливаем начальные значения MyCookie.Values["Count"] = Convert.ToString(0); MyCookie.Values["LastVisit"] = DateTime.Now.ToString(); //Будет существовать 1 год, без этой строки до закрытия браузера MyCookie.Expires = DateTime.Now.AddYears(1); //Сохраняем cookie Response.Cookies.Add(MyCookie); Label1.Text = "Просьба указать свое имя и нажать кнопку"; >else < string s = string.Empty; try < s = MyCookie["Name"].ToString(); >catch (Exception) < return; >if (s != string.Empty) < vGetCookie(); >> > private void vGetCookie() < HttpCookie MyCookie = Request.Cookies["MySite1"]; string s = MyCookie["Count"].ToString(); int i = Convert.ToInt32(s); i++; MyCookie.Values["Count"] = Convert.ToString(i); MyCookie.Expires = DateTime.Now.AddHours(1); Label1.Text = "Программа MySite1 приветствует Вас " + MyCookie.Values["Name"] + " на нашем сервере!\n"; Label1.Text += "Рады видеть Вас " + Convert.ToString(i) + "й раз"; if (i != 1) < Label1.Text += "после последнего посещения " + MyCookie.Values["LastVisit"] + "."; >else < Label1.Text += "."; >MyCookie.Values[«LastVisit»] = DateTime.Now.ToString(); Button1.Visible = false; TextBox1.Visible = false; //Записываем cookie Response.Cookies.Add(MyCookie); > protected void Button1_Click(object sender, EventArgs e)

Результат работы показан на Рис.23.

Рис.23. Пример использования cookie

В файле C:\Documents and Settings\Имя_Компьютера\Cookies\, найдем наше «печенье». Имя cookie включает имя_пользователя_компьютера@имя_сервера[1] (где имя_сервера localhost, yandex и т.п.) при старте будет записано:

MySite1 Count=1&LastVisit=23.06.2005 11:40:54&Name=Wlad localhost/ 1024 464265472 29849843 3125371136 29849834 *

После регистрации и второго вызова:

MySite1 Count=4&LastVisit=23.06.2005 11:45:45&Name=Wlad localhost/ 1024 2704265472 29849843 1065403840 29849835 *

Параграф 4.3. Сеансы и их использование

4.3.1. Понятие сеанса в ASP.NET

Необходимость использования сеансов возникла из за потребности хранения больших объемов информации, хранение которых уже рассмотренными нами способами либо невозможно, либо нецелесообразно.

Сеанс (сессия) объединяет некоторую информацию серии запросов с одного адреса (одного клиента) в течении определенного времени. Каждый клиент, который получает доступ к сайту, получает свой сеанс и, как следствие, свою коллекцию данных. Сеанс начинается, когда пользователь в первый раз запрашивает страницу сайта, и заканчивается, когда приложение явно закрывает сеанс или когда превышено заданное время ожидания.

Автоматически определять и классифицировать запросы, приходящие от клиента.

Хранить данные с ограниченной областью действия на сервере.

Создавать соответствующие события управления жизненным циклом сессии (Session_OnStart, Session_OnEnd и т. д.).

Каждый активный сеанс ASP.NET имеет идентификатор, представляющий собой 120-разрядную строку — SessionID, состоящую из допустимых в URL-адресах знаков ASCII. Алгоритм генерации значений SessionID гарантирует уникальность (во избежание совпадений идентификаторов сеансов) и случайность. Нельзя воспользоваться значением SessionID для вычисления значения идентификатора сеанса. В зависимости от параметров приложения строка SessionID передается между сервером и клиентом посредством файлов cookie или с помощью включения значения SessionID в URL-адрес. Этот идентификатор является единственным фрагментом информации сессии, которая передается между сервером и клиентом.

Когда клиент предъявляет идентификатор сеанса, то сервер находит соответствующий сеанс, извлекает данные, преобразует их в объекты и помещает в коллекцию данных, откуда данные становятся доступны программному коду страницы запроса. Идентификаторы у разных клиентских запросов различны, как результат — доступ возможен только к своей коллекции данных. До тех пор, пока клиент не использует сеанс для сохранения данных, идентификатор сеанса при каждом запросе генерируется вновь (иначе, сеанс сохраняется только если было сохранение данных). Это позволяет сократить затраты памяти и время на сохранение данных и идентификатора сеанса.

Основной недостаток сеансов — это затраты памяти, которые при большом объеме хранимой информации и большом числе обращений к серверу могут значительно снизить его производительность.

4.3.2. Свойства и методы объекта Session

Для организации работы с сеансами используется класс System.Web.SessionState.HttpSessionState, который на web странице приложения доступен как встроенный объект Session.

Перечислим основные свойства и методы HttpSessionState:

Основные свойства

CodePage — возвращает или задает идентификатор кодовой страницы для текущего сеанса.

Contents — возвращает ссылку на текущий объект состояния сеанса. Иначе, семейство Contents объекта Session содержит все хранящиеся переменные сеанса.

Count — возвращает число элементов в коллекции состояния сеанса.

IsCookieless — возвращает значение, показывающее, был ли идентификатор сеанса внедрен в URL-адрес или сохранен в файле cookie.

IsNewSession — возвращает значение, показывающее, был ли создан сеанс с текущим запросом.

IsReadOnly — возвращает значение, показывающее, доступен ли сеанс только для чтения.

IsSynchronized — возвращает значение, показывающее, синхронизирован ли доступ к коллекции значений состояний сеанса (потокобезопасный доступ).

Item — возвращает или устанавливает индивидуальные значения сеанса. (в C# является индексатором класса HttpSessionState).

Keys — возвращает коллекцию ключей всех значений, сохраненных во время сеанса.

LCID — возвращает или задает идентификатор языка и стандартов (LCID) текущего сеанса.

Mode — возвращает текущий режим состояния сеанса.

SessionID — возвращает уникальный идентификатор сеанса, применяемый для определения сеанса.

StaticObjects — возвращает коллекцию объектов, объявленных тегами файла приложения ASP.NET: global.asax.

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

Timeout — возвращает и задает допустимое время ожидания (в минутах) между запросами перед завершением сеанса провайдером состояния сеанса.

Основные методы

Abandon — уничтожает все объекты, хранимые в объекте Session и освобождает их ресурсы. Если метод Abandon не вызван явно, сервер уничтожит объекты при истечении времени ожидания сеанса. При вызове метода Abandon запрашивается удаление текущего объекта Session, но он не удаляется до тех пор, пока не будут обработаны все команды сценария на текущей странице. (можно обращаться к переменным, хранимым в объекте Session, с той же страницы, где расположен вызов Abandon, но не с любой последующей веб-страницы).

Add — добавляет новый элемент в состояние сеанса.

Clear — удаляет все значения из состояния сеанса.

CopyTo — Копирует коллекцию значений состояния сеанса в одномерный массив, начиная с заданного индекса массива.

Equals — (унаследовано от Object)- определяет, равны ли два экземпляра Object.

GetEnumerator — возвращает перечислитель всех значений состояния сеанса для текущего сеанса.

GetHashCode — (унаследовано от Object) — служит хеш-функцией для конкретного типа, пригоден для использования в алгоритмах хеширования и структурах данных, например в хеш-таблице.

GetType (унаследовано от Object) — возвращает Type текущего экземпляра.

Remove — удаляет элемент из коллекции состояний сеанса.

RemoveAll — удаляет все значения состояния сеанса.

RemoveAt — удаляет элемент по заданному индексу из коллекции состояний сеанса.

4.3.3. Пример использования сеанса

Рассмотрим пример хранения некоторого класса RegInfo с использованием сессии. Для этого объявим класс в, котором пользователь будет накапливать некоторую регистрационную информацию:

public MyInfo tMyInfo; public class MyInfo

private void Page_Load(object sender, System.EventArgs e) < Session.Timeout=40; //IsPostBack =false если вызов страницы, а не реакция на событие //Серверного элемкнта управления if(Page.IsPostBack == false) < Label1.Text="Введите Ваше имя:"; Label2.Text="Введите Ваш email:"; >else < Label1.Text="Ваше имя:"; Label2.Text="Ваш email:"; >> . private void Button1_Click(object sender, System.EventArgs e) < //Создание сессии reg и запись данных if(Session["reg"]==null) < tMyInfo=new MyInfo(); tMyInfo.Name=TextBox1.Text; tMyInfo.Email=TextBox2.Text; Session["reg"]=tMyInfo; TextBox1.Text=""; TextBox2.Text=""; >else < //При любом последующем вызове - выборка данных tMyInfo=new MyInfo(); tMyInfo=(MyInfo)Session["reg"]; TextBox1.Text=tMyInfo.Name; TextBox2.Text=tMyInfo.Email; >>

Несколько примеров использования свойств и методов Session:

Использование метода IsCookieless:

if(!Session.IsCookieless) Label1.Text="Идентификатор сеанса не внедрялся в URL";

При значении свойства cookieless=»true», URL запроса будет выглядеть примерно так:

http://localhost/Pr1/(bn4tuvyk03hsa555g4nehx55)/Default.aspx

С помощью метода Remove семейства Contents можно выборочно или полностью удалить ссылки на переменные, которые добавлялись при соответствующем состоянии сеанса:

Session.Contents.RemoveAll(); //Удаляем введенное имя, оно будет недоступно, после обработки всех событий на странице Session.Contents.Remove("Name");
4.3.4. Настройка состояния сеанса

Конфигурационные данные хранятся в текстовом файле Web.config (в Visual Studio .Net генерируется автоматически), находящемся в каталоге приложения. Этот файл определяет условия выполнения приложений ASP .NET — такие как параметры отладки и системы безопасности. Состояние сеанса также хранится в файле Web.config.

Пример фрагмента файла Web.config:

Параметр mode может иметь значения: «InProc» — (по умолчанию) внутренний режим состояния сеанса (информация хранится в том же процессе, где и рабочие потоки), «off» — отключено управление состоянием сеанса, «StateServer» — использование отдельной службы сервера для управления сеансом, «SqlServer» — использование базы данных SQL для хранения состояния сеанса.

Если в приложении не используются сеансы, то для некоторого повышения производительности целесообразно задать mode=»Off», mode=»InProc» обеспечивает высокую производительность, но не сохраняет сеанс при перезапуске страницы.

При использовании mode=»StateServer», служба управления состоянием сеанса (служба ASP.NET State Server), запущенная на сервере, дает базовый уровень защиты при перезапуске процесса, что, естественно, влечет дополнительные временные издержки. В этом случае обязательно указание параметра stateConnectionString (TCP/IP компьютера — служба может быть запущена и на другом компьютере). Служба запускается из Administrative Tools панели управления, пункт Services, найти ASP.NET State Server и через контекстное меню строки с именем сервера выполнить пункт меню Start. Через контекстное меню, пункт Properties, выполняется и установка Startup Type (например, на автоматический запуск — выбрать Automatic).

При использовании mode=»SqlServer», Sql сервер обеспечивает самый надежный, но и самый медленный метод хранения данных. Метод требует задания параметров sqlConnectionString, включая пароль доступа (явно нежелательно при неиспользовании интегрированных методов доступа), установку специальных хранимых процедур для сохранения и извлечения информации о сеансе, и временных баз данных для сеансов.

ASP.NET включает для этой цели сценарий Transact-SQL с именем InstalSqlState.Sql (каталог Winnt\Microsoft.Net\Framework\номер_версии, сценарий можно запустить используя утилиты SQL Server OSQL.exe или Query Analyzer). После выполнения сценария средства все указанные средства, обеспечивающие работу с сессией и хранения данных в Sql БД становятся доступными, в том числе и после перегрузке компьютера.

Значении параметра cookieless=»true» означает, что идентификатор сеанса внедряется в URL-адрес.

Значение timeout устанавливает время жизни сеанса.

Глава 5. Класс — HttpApplication и состояние приложения

В ASP.NET есть специальный класс — HttpApplication (System.Web.HttpApplication), представляющий все приложение. Он контролирует его общее состояние, и обрабатывает глобальные события. В основном этот класс используется для хранения объектов уровня приложения, к которым может получить доступ любой клиент.

Класс HttpApplication предоставляет программный доступ к методам HttpApplication.Init и HttpApplication.Dispose и событиям Application_OnStart и Application_OnEnd и др. Кроме того, из него есть доступ ко всем public свойствам и событиям во всех модулях приложения.

using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.SessionState; namespace Pr2 < /// /// Summary description for Global. /// public class Global : System.Web.HttpApplication < /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; public Global() < InitializeComponent(); >protected void Application_Start(Object sender, EventArgs e) < >protected void Session_Start(Object sender, EventArgs e) < >protected void Application_BeginRequest(Object sender, EventArgs e) < >protected void Application_EndRequest(Object sender, EventArgs e) < >protected void Application_AuthenticateRequest(Object sender, EventArgs e) < >protected void Application_Error(Object sender, EventArgs e) < >protected void Session_End(Object sender, EventArgs e) < >protected void Application_End(Object sender, EventArgs e) < >#region Web Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() < this.components = new System.ComponentModel.Container(); >#endregion > >

Глава 6. Новые возможности передачи данных между формами в ASP.Net 2.0

В ASP.NET 2.0 появилась возможность непосредственно передавать данные, введенные на одной странице в некоторой вводной форме (в поле элемента управления) другой странице формы одного решения. Причем, данный механизм позволяет получать в вызываемой форме значения свойств элементов из вызывающей формы. Для этого в ASP.NET 2.0 для ряда контролов введено дополнительное свойство — PostBackUrl, позволяющие указать какой именно странице решения должна быть передана информация из элементов управления вызывающей страницы, если обращение к серверу инициировано этим элементом управления.

Например, создадим решение, имеющее две формы (Default и WebForm2). Разместим на форме Default контролы TextBox и Button. Для контрола Button установим свойство PostBackUrl в значение WebForm2 (Рис.24, 25).

Рис.24. Решение сайта

Рис.25. Решение сайта

Выполним решение сайта. Убедимся, что даже при отсутствии обработчика нажатия кнопки, сервер, при нажатии кнопки «Передать», выполнит редирект на WebForm2. Но не только пользователь будет переадресован на страницу WebForm2.aspx, но и вся информация об элементах управления формы Default.aspx, будет также передана форме WebForm2.aspx. Для реализации этой возможности, ASP.NET 2.0 проверяет формы на наличие в них элементов управления с атрибутом PostBackUrl и, при их наличии, создает для страницы дополнительное скрытое поле __PREVIOUSPAGE, которое и содержит информацию о состоянии элементов формы. Эта информация может быть извлечена на вызываемой странице через свойство PreviousPage.

Для демонстрации возможности передачи информации (из контрола TextBox формы Default.aspx в форму WebForm2.aspx) на странице WebForm2 разместим контрол Label и контрол TextBox.

В файле WebForm2.aspx.cs напишем следующий код:

protected void Page_Load(object sender, EventArgs e) < if(PreviousPage != null) < Button button = (Button)PreviousPage.FindControl("Button1"); Label1.Text = "Вызов выполнен кнопкой: " + button.Text; TextBox textBox = (TextBox)PreviousPage.FindControl("TextBox1"); TextBox1.Text = textBox.Text; >>

Теперь, при нажатии в форме Default.aspx кнопки «Передать» будет вызвана форма WebForm2, и в ней отобразится информация, введенная в textBox1 формы Default.aspx (Рис.26.).

Рис.26. Выполнение решения сайта

Другая возможность получения доступа с использованием PreviousPage показана на Рис.27. В форме Default мы объявили public переменную viI и при загрузке присвоили ей значение 10.

public partial class _Default : System.Web.UI.Page < public int viI = 0; protected void Page_Load(object sender, EventArgs e) < viI = 10; >.

Далее, используя приведение PreviousPage к странице родителю мы можем получить доступ к public свойствам и переменным вызвавшей страницы.

_Default previousPage = PreviousPage as _Default; int i = previousPage.viI; //i будет равно 10

Рис.27. Выполнение решения сайта

Отметим, что PreviousPage содержит информацию практически обо всей вызвавшей странице: Title, Header, IsValid, IsPostBack и т.д. и т.п. (Рис.28.).

Молчанов Владислав 27.06.2005г.

Адаптировано к VS 2005 5.04.2007г.

Еcли Вы пришли с поискового сервера — посетите мою главную страничку

На главной странице Вы найдете программы комплекса Veles — программы для автолюбителей, программы из раздела графика — программы для работы с фото, сделанными цифровым фотоаппаратом, программу Bricks — игрушку для детей и взрослых, программу записную книжку, программу TellMe — говорящий Русско-Английский разговорник — программу для тех, кто собирается погостить за бугром или повысить свои знания в английском, теоретический материал по программированию в среде Borland C++ Builder, C# (Windows приложения и ASP.Net Web сайты).

Редактор для HTML: пишем код, чтобы было удобно

Для того, чтобы написать код, сгодится вообще любой текстовый редактор. Подойдёт даже «Блокнот» на вашем компьютере (но в нём очень неудобно всё делать). Мы скачаем и установим хороший редактор, заточенный под веб-разработку. Покажем всё на примере Visual Studio Code.

Зайдите на сайт и скачайте редактор. Если у вас Windows, то нажмите на любую из синих кнопок. Если Mac OS или Linux — нажмите Other platforms.

Установка пройдёт как обычно — нужно запустить файл VSCodeUserSetup, много раз нажать «Далее» и поставить пару галочек.

Шаг 2. Запускаем редактор и осматриваемся

Свежеустановленный VS Code встречает нас экраном с большим количеством ссылок. С ними можно познакомиться позже, а сейчас нужно настроить всё для работы.

Хорошо бы, чтобы во время работы все нужные файлы лежали в одной папке (пока проект маленький, так можно делать). Для этого добавим рабочую папку, чтобы VS Code показывал нам только её содержимое.

По шагам на скриншоте:

  1. Add workspace folder — открывает меню выбора папки.
  2. Создадим новую папку personal_page в любом удобном месте и зайдём в неё.
  3. Нажмём Add.

После этого слева появится панель Explorer с пустым рабочим пространством Untitled (Workspace). Мы создали папку, давайте её наполним.

Шаг 3. Добавляем файлы

После создания папка пустая. Щёлкнем правой кнопкой по заголовку personal_page и добавим три файла, которые понадобятся в работе — index.html, style.css и script.js. Для начала этого хватит.

Шаг 4. Делаем работу удобнее

Сейчас все три файла открыты во вкладках, и между ними не всегда удобно переключаться. Чтобы было удобнее, код со стилями можно перенести в другую часть окна, например, вниз. Для этого нажмите правой кнопкой по вкладке со style.css и выберите split down, чтобы увидеть результат.

Шаг 5. Добавляем код

Пока отредактируем только index.html (файл с разметкой) и style.css (файл со стилями), а script.js оставим на будущее. Если у вас уже есть какой-нибудь код, напишите его, или используйте готовый — мы, например, возьмём код из интерактивных курсов.

   Сайт начинающего верстальщика  
Взгляд упал на кота.
Подвал сайта

Скопируем код со стилями из файла — откройте его в браузере, скопируйте все строки и вставьте в файл style.css в редакторе.

Шаг 6. Запускаем код и смотрим на результат

Самый простой способ — открыть папку с файлами через проводник и запустить файл index.html . Вы увидите результат вёрстки в браузере, но это не слишком удобно — при любых изменениях придётся переходить в браузер и обновлять страницу.

Давайте настроим всё так, чтобы наша страничка открывалась сама и обновлялась, если вы что-то изменили в разметке или стилях.

Для этого нам понадобится расширение Live Server. Найти его можно прямо в VS Code (пятая иконка в меню слева) — введите название и нажмите Install. Другой способ — скачать Live Server из магазина расширений, но это менее удобно.

После установки расширения Windows может попросить разрешение на доступ к сети. Это нужно, чтобы запускать локальный сервер, Разрешайте, это безопасно.

Чтобы запустить код, нажмите кнопку Go Live на нижней панели.

Результат выглядит так. Слева — редактор, справа — браузер. Теперь измените код в редакторе и сохраните его, а он автоматически изменится и в окне браузера.

Что мы сделали

  1. Установили и настроили редактор кода.
  2. Создали рабочую папку и добавили туда файлы нашего проекта.
  3. Научились редактировать и сохранять файлы с кодом.
  4. Установили расширение, чтобы сразу видеть результат вёрстки.

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *