Создание страниц ASP.NET в среде Visual Studio

Среда Visual Studio существенно облегчает разработку Web-приложений. Основными действиями, выполняемыми в ходе создания приложения в среде, являются создание форм, написание обработчиков событий, добавление файлов (таблиц стилей, страниц и т.п.), отладка

В Visual Studio разных версий предлагается несколько режимов создания Web-приложений, функционирующих на основе ASP.NET, чаще всего используются Website… и Project… В Visual Studio 2005 включен только Website…, в 2008 и 2010 – оба.

В режиме создания Web-сайта (File - New Website…). Visual Studio создает только файлы, относящиеся к сайту (файл с кодом страницы, файл с программами обработчиков и файл конфигурации).

В окне New Web Site могут быть дополнительно указаны параметры: версия.NET, шаблон (выбираем ASP.NET WEB Site), размещение (место хранения файлов Web-сайта), язык программирования. После того, как выбор сделан (нажата ОК) будет создана заготовка Web-приложения (три основных файла). Компиляция страниц будет выполняться средой ASP.NET перед открытием в браузере.

В режиме создания проекта (File - New Project…) кроме основных файлов, генерируется несколько вспомогательных и файл проекта с расширением.csproj, в котором фиксируются составляющие проект файлы и сохраняются некоторые отладочные параметры.

В окне New Project кроме типа (ASP.NET Web Application), места размещения и языка, необходимо выбрать имя (Solution Name), которое затем будет использовано для создания в выбранном месте размещения соответствующего подкаталога.

В отличие от режима создания Web Site, кроме размещения информации в различных файлах, при запуске Web-проекты компилируются Visual Studio (а не ASP.NET). Классы Web-страниц объединяются в одну сборку, которая получает то же имя, что и у Web-проекта (например, WebApplication) и затем размещается в папке bin. В Web-проекте для страниц всегда используют модель отделенного кода, объявления для всех элементов управления содержаться в файле с расширением.aspx.desginer.cs. Во время компиляции файлы с кодами обработчиков и кодами элементов управления будут объединены. В беспроектном Web-сайте файла с объявлениями элементов управления нет, поскольку эта часть кода генерируется во время компиляции системой ASP.NET. Есть и другие отличия (например, в содержании директивы Page и т.п.), останавливаться на которых мы не будем.

Дальнейшие действия по созданию Web-приложения практически не отличаются.

В ходе работы по созданию сайтов используются окна и панели, состав и место расположения которых можно изменять, используя меню View и перетаскивая их мышью. Типичный вид среды при разработке Web-приложений приведен на рис.4.4.

Рис. 4.4. Вид окна для разработки Web-приложений

Панели инструментов, содержат различные команды для форматирования текста, поиска текста и т.д.

Обозреватель решений, отображает файлы и папки веб-узла.

Окно документов обеспечивает отображение документов в различных представлениях и служит визуализированным редактором форм.

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

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

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

Окно вывода служит для вывода сообщений среды (ошибки, информация отладчика и т.п.).

Создание форм. Создаваемые документы (формы и файлы с программным кодом) открываются в окне документов. При работе с формами предусмотрено два режима отображения Design и Source. В первом режиме интерфейс можно конструировать визуально, во втором – путем написания кода разметки. Для переключения используются закладки в нижней части окна. В режиме Design можно повысить наглядность отображаемой структуры, выполнив команду Details из меню View.

Форма ASP.NET – документ, на основе которого формируется HTML-страница, отправляемая клиенту. Она создается путем размещения элементов в окне документов. Элементы для размещения выбираются из панели инструментов. В панели элементы сгруппированы по типам.

Чаще всего используются элементы из групп HTML и Standard.

Группа HTML содержит HTML-элементы, соответствующие одноименным элементам обычных Web-страниц. С их использование создается статическая разметка страницы. Однако они могут быть преобразованы в серверные путем добавления атрибута runat="server" или выполнения команды Run As Server Control из контекстного меню элемента. Их называют серверными HTML-элементами управления, при их обработке перед отправкой формируется только один HTML-тег.

Группа Standard содержит серверные элементы управления с расширенной функциональностью. Среди них имеются полнофункциональные элементы управления, выполняющие генерацию достаточно сложного HTML-кода и клиентских сценариев JavaScript для создания развитого интерфейса на клиенте. Это такие элементы как Calendar, AdRotator, TreeView. Среди них есть и аналоги HTML-элементов (кнопок, текстовых полей и т.д.). Элементы этой группы называют серверными Web-элементами управления, они являются основными при создании форм.

Среди других групп отметим такие.

Login - элементы управления входом в систему. Эти элементы управления поддерживают аутентификацию пользователя, их можно использовать вместо написания своих собственных интерфейсов для входа в систему и создания новых пользователей.

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

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

Data - элементы управления данными.

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

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

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

Пример 4.5.

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

Код страницы с управляющими элементами

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="Label1" runat="server" Text="Приветствуем Вас на нашем сайте!" Font-Size="X-Large"></asp:Label><br/>

<asp:Label ID="Label2" runat="server"

Text="Для повышения эффективности дальнейшего сотрудничества заполните следующую анкету:" Font-Size="Large"></asp:Label>

</div>

<asp:Label ID="Label3" runat="server" Text="Введите имя "></asp:Label>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<br />

<asp:Label ID="Label4" runat="server" Text="Введите г.р. "></asp:Label>

<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

<br />

<asp:Label ID="Label5" runat="server" Text="Введите E-mail"></asp:Label>

<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>

<br />

<asp:Label ID="Label6" runat="server" Text="Введите адрес"></asp:Label>

<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>

</form>

</body>

</html>

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

using System;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

public partial class _Default: System.Web.UI.Page

{

public DataSet DS;

protected void Page_Load(object sender, EventArgs e)

{ //Создание кнопки на форме:

Button newButton = new Button();

newButton.ID = "newButton";

newButton.Text = "Отправить данные";

form1.Controls.Add(newButton);

//Назначение события для кнопки:

newButton.Click += new EventHandler(newButton_Click);

}

void newButton_Click(object sender, EventArgs e)

{

DS = new DataSet();

string phpt=Server.MapPath(Request.ApplicationPath + "/users.xml");

DS.ReadXml(phpt);

DS.Tables[0].Rows.Add(new object[] { TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text });

DS.WriteXml(phpt);

Label2.Text = "Вы уже зарегистрированы";

Label3.Text = "Имя";

Label4.Text = "г.р.";

Label5.Text = "E-mail";

Label6.Text = "Адрес";

//Поиск и удаление созданной кнопки:

Button foundButton = (Button)Page.FindControl("newButton");

if (foundButton!= null)

{

foundButton.Parent.Controls.Remove(foundButton);

}

}

}

До начала работы с ресурсом в папку узла необходимо поместить XML-файл такого содержания (это избавляет от необходимости описывать структуру XML-документа программно):

<?xml version="1.0" standalone="yes"?>

<users>

<user>

<name></name>

<year></year>

<email></email>

<adr></adr>

</user>

</users>

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

При разработке приложений часто возникает задача сохранения и обработки данных как общих для разных пользователей (посетителей сайта), так и сохранение данных в течение сеанса одного пользователя. Решаться она может различными способам. Это является следствием того, что взаимодействие сервера и браузера осуществляется по протоколу http, при котором сервер не сохраняет информации об обработанном запросе. Каждый запрос обслуживается сервером независимо от других без учета их принадлежности одному сеансу пользователя. С точки зрения разработчика распределенного приложения (а именно таким является динамический Web-сайт) это существенный недостаток, который необходимо преодолеть. В рамках технологии ASP.NET для этого имеется несколько возможностей.

Во-первых, для этого могут использоваться Cookie - небольшие файлы, создаваемые браузером на жестком диске или в памяти машины клиента, позволяющие Web серверам хранить в них информацию и идентифицировать запросы. Это достаточно удобный метод, но ему присущ ряд недостатков, пользователь может отключить использование cookie или удалить их, доступность и открытость хранимой информации. Для получения доступа к cookie в приложении должно быть подключено пространство имен using System.Net, классы Request и Response содержат необходимые свойства и методы.

Во-вторых, для этого можно использовать скрытое поле формы (input type="hidden" …. name="__VIEWSTATE"), отправляемой клиенту после обработки страниц ASP.NET. Эта возможность появляется после установки свойства EnableViewState="true" в директиве @ Page. Многие серверные элементы управления используют этот метод неявно (без участия разработчика). Однако, можно сохранять значения и явно, используя коллекцию ViewState:

ViewState["Error"]=viNumError.ToString(); //сохранение

viNumError =Convert.ToInt32(ViewState["Error"]); //восстановление

Третья возможность сохранить значения – использование объектов Session и Application уже рассматривались в п.п. 3.3.2.2.

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

Продемонстрируем употребление переменных на примере организации самого простого сетевого приложения чата.

Пример 4.6.

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

В режиме Design создадим такую страницу:

Код страницы в режиме Sorce должен выглядеть так:

<html xmlns="http://www.w3.org/1999/xhtml" >

<head id="Head1" runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>Введите имя и напишите сообщение</div>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Label ID="Label1" runat="server" Text="Имя"></asp:Label><br />

<asp:Label ID="Label2" runat="server" Text="Текст сообщения"></asp:Label><br />

<asp:TextBox ID="TextBox2" runat="server" Width="335px"></asp:TextBox>

<asp:Button ID="Button1" runat="server" Text="Отправить"

onclick="Button1_Click" /><br />

<asp:ListBox ID="ListBox1" runat="server" Height="182px" Width="437px"></asp:ListBox>

</form>

</body>

</html>

Обработчики:

using System;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Collections;

public partial class _Default: System.Web.UI.Page

{

static ArrayList sms=new ArrayList();

protected void Button1_Click(object sender, EventArgs e)

{

string s = TextBox1.Text + ">>" + TextBox2.Text + "\n";

TextBox1.Enabled = false;

sms.Add(s);

ListBox1.Items.Clear();

foreach (string textLine in sms)

{

string line = textLine.Trim();

if (line.Length == 0) continue;

ListBox1.Items.Add(line);

TextBox2.Text = "";

}

}

protected void Page_Load(object sender, EventArgs e)

{

Response.Write("Hello");

if (!Page.IsPostBack) {

foreach (string textLine in sms)//Просмотр строк массива sms

{

string line = textLine.Trim(); //Удаление пробелов в начале и конце

if (line.Length == 0) continue;//Пропуск пустых сток

ListBox1.Items.Add(line); //Добавление строки в элемент ListBox

}

}

}

}

При первом обращении пользователя к странице выполняется обработчик события Page_Load, в ответе сервера будет содержаться приветствие и содержимое переменной sms (объявленной как static ArrayList).

После заполнения полей для имени и сообщения, пользователь нажимает кнопку "Отправить", на сервере запускается обработчик события Button1_Click, формируется строка из имени пользователя и его сообщения, строка добавляется к переменной sms, новое содержимое переменной записывается в ListBox1 и будет отправлено пользователю, блокируется поле для ввода имени и ощищается поле сообщения. Обработчик Page_Load добавит только приветсятвие.

Добавление файлов. В состав создаваемого Web-сайта кроме уже рассмотренных файлов (aspx и cs) могут входить файлы с другими страницами, таблицами стилей, клиентскими скриптами и т.п. Переход к созданию этих файлов производится в обозревателе решений через контекстное меню (команда Add New Item…). В открывшемся окне выбираем тип создаваемого файла (Web Form, HTML Page, Style Sheet, Jscript File и т.п.).

К сайту можно добавить и существующие файлы (например, страницы HTML или ASP) по команде Add Existing Item… из контекстного меню обозревателя решений. При создании всех этих документов среда обеспечивает различную степень поддержки.

Мы рассмотрим создание клиентских скриптов и таблиц стилей.

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

Клиентский скрипт (для определенности будем считать, что используется язык JScript) может быть помещен в статическую разметку ASP.NET страницы (тег <script …>…</script>) или в отдельный файл. Ни возможности языка, ни синтаксис не изменились. Единственная особенность, которую необходимо учитывать – это возможность изменения разметки после обработки на сервере. Например, может быть изменено значение атрибута ID или появиться тег, которого не было в исходной разметке. Для отслеживания изменений ID у серверных элементов имеется специальное свойство ClientID, а остальное необходимо учитывать, разрабатывая алгоритм обработки.

Для иллюстрации действий по включению клиентских скриптов в ASP.NET страницы изменим пример 4.3 (скрытие изображения), выполнив всю обработку на клиенте.

Пример 4.7.

Рассмотрим два варианта с Web и HTML элементами.

В режиме Design создадим страницу, содержащую Web элементы (изображение и переключатель):

В код страницы добавим тег, содержащий Jscript:

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Пример 3.6</title>

<script type="text/javascript" language="javascript">

function ShowHide()

{image_ = document.getElementById("<%=Image1.ClientID %>");

checkBox_ = document.getElementById("<%=CheckBox1.ClientID %>");

if (checkBox_.checked == true) {image_.style.visibility='visible';}

else {image_.style.visibility='hidden';}

}

</script>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Image ID="Image1" runat="server" ImageUrl="~/Tiguan.jpg" Width="181px" /><br />

<asp:CheckBox ID="CheckBox1" onclick="ShowHide()" Checked="true" runat="server" />

<hr />

</div>

</form>

</body>

</html>

Отметим основные особенности, связанные с использованием клиентского скрипта.

Тег script не содержит атрибута runat=server, следовательно, выполняться на сервере не будет.

В качестве аргумента функции getElementById, которая возвращает указатель на элемент страницы по его ID, записана конструкция <%=Image1.ClientID %>. Это сокращенная запись от
<% Response.Write (Image1.ClientID) %>, в этом месте в выходной поток будет помещено значение фактического атрибута ID.

В элементе CheckBox в качестве значения атрибута onclick указана функция из клиентского скрипта. Именно она будет вызвана при возникновении события, поскольку умолчания предполагают запрет на немедленную отправку данных (AutoPostBack="false").

Создадим страницу, используя HTML элементы, а скрипт поместим в отдельный файл. Внешний вид страницы не изменится, ее код:

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Untitled Page</title>

<script type="text/javascript" language="javascript" src="JScript.js">

</script>

</head>

<body>

<form id="form1" runat="server">

<div>

<img ID="Image1" runat="server" src="Tiguan.jpg" Width="181"/></br>

<input id="CheckBox1" type="checkbox" onclick="ShowHide()" Checked="true" runat="server" />

</div>

</form>

</body>

</html>

Код скрипта в файле JScript.js содержит только объявление функции:

function ShowHide()

{image_ = document.getElementById("Image1");

checkBox_ = document.getElementById("CheckBox1");

if (checkBox_.checked == true) {image_.style.visibility='visible';}

else {image_.style.visibility='hidden'; }

}

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

Отметим еще одну особенность модели обработки событий, принятую в ASP.NET. Для события Web серверного управляющего элемента <asp:Button… /> предусмотрено два атрибута для связи с обработчиками onclick и onclientclick (серверный и клиентский, соответственно). Вызывается сначала клиентский обработчик, а затем идет передача данных о событии серверу. Благодаря этому на клиенте можно запросить подтверждение действия, если это требуется (например, подтвердить намерение удалить какие-либо данные). Это можно сделать и на сервере, но тогда придется дважды обмениваться данными с клиентом, что вызовет дополнительные задержки.

Следующий пример иллюстрирует эту возможность.

Пример 4.8.

Создать страницу с последовательно выполняющимися клиентским и серверным скриптами.

На странице расположена кнопка, надпись (изменение надписи будет имитировать обработку на сервере) и клиентский скрипт:

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Пример 3.4</title>

<script type="text/javascript" language="javascript">

function C_Click()

{return confirm('Подтверждаете удаление?');}

</script>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Button ID="Mybtn" runat="server" onclick="S_Click"

onclientclick="return C_Click()" Text="Удалить запись" />

</div>

<asp:Label ID="Label1" runat="server" Text=""></asp:Label>

</form>

</body>

</html>

Код обработчика на сервере:

using System;

public partial class _Default: System.Web.UI.Page

{

protected void S_Click(object sender, EventArgs e)

{

Label1.Text = "Обработка завершена, запись удалена";

}

}

Функция C_Click из клиентского скрипта создает окно с двумя кнопками, и возвращает true или false в зависимости от нажатой кнопки.

При false передача данных серверу блокируется, как будто кнопка не нажата (должно быть именно onclientclick="return C_Click()", а не onclientclick="C_Click()").

При true произойдет обращение к обработчику на сервере (на странице отобразится сообщение о произведенном изменении).

Таким образом, при нажатии одной кнопки последовательно вызываются два обработчика (клиентский и серверный).

Таблицы стилей. Существует три способа включения таблиц стилей в Web-страницу: связывание файлов таблиц CSS с использованием тега link, размещение правил CSS в теге style и использование деклараций CSS в качестве значения атрибута style тегов. Все они могут применяться при создании ASP.NET страниц. Однако при работе в среде наибольшей поддержкой пользуется первый, его и рассмотрим.

Для включения в состав сайта файла с таблицами стилей используются команды из контекстного меню обозревателя решений Add New Item… (создание нового), Add Existing Item… (включение существующего). Создавая новый файл необходимо в окне выбрать Style Sheet и задать имя файла.

Для заполнения файла правилами или их редактирования файл открывается в окне документов (двойной щелчок по значку файла в обозревателе решений). Зная синтаксис, можно непосредственно записывать необходимые правила. Для облегчения работы можно использовать встроенный контекстный редактор и мастер Style Builder.

Для добавления нового правила в таблицу необходимо вызвать контекстное меню и выбрать команду Add Style Rule…, в открывшемся окне выбирается тип селектора, и задаются необходимые имена. Заготовка правила будет вставлена в таблицу.

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

Рис. 4.5.. Вид окон контекстного редактора правил

Для обращения к мастеру необходимо расположить курсор внутри фигурных скобок правила, вызвать контекстное меню и выбрать команду Build Style… Откроется окно мастера, содержащее группы свойств и инструменты задания их значений. Выбирается группа, выбирается свойство, задается значение. На рис.4.6 приведено контекстное меню и окно мастера.

Рис.4.6. Вид окна мастера Build Style

Для связывания файла таблиц стилей со страницей необходимо разместить внутри тега <head>…</head> тег <link type="text/css" rel="stylesheet" href="StyleSheet.css"/>, набрав в окне соответствующую строку. Можно также выполнить перетаскивание значка файла в соответствующе место страницы.

Значение атрибута Class для связи с селектором правил задается в свойствах (CssClass для Web элементов и Class для HTML элементов).

Для задания стиля непосредственно в теге используется свойство Style.

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

Для расширения возможностей по форматирования страниц в среде Visual Studio включено средства Темы (theme). В отличие от CSS форматирование с использованием тем выполняется на сервере. Тема представляет собой набор специальным образом оформленных текстовых файлов, имеющих расширение ".skin". Содержимое файла отражает оформление или поведение элементов сайта (дополняет или заменяет некоторые их свойства). Темы размещаются в предопределенных директориях файловой системы. Например, локальные темы (применяются только для данного сайта) размещаются в специальной папке с названием App_Themes" в корневой директории сайта. Кроме того, в директории "App_Themes" могут присутствовать файлы каскадных таблиц стилей, рисунков и другие типы файлов, которые будут использоваться для оформления элементов.

Отладка. Для отладки Web-страницы, открытой в окне документов, необходимо выполнить команду Start Debugging из меню Debug или нажать соответствующую кнопку в панели инструментов. Дальнейшие события зависят от расположения проекта. Если отлаживаемый проект хранится на удаленном Web-сервере или в локальном виртуальном каталоге IIS, VisualStudio запускает браузер по умолчанию и устанавливает в нем соответствующий URL.

Если приложение создается в файловой системе, то запускается встроенный (тестовый) Web-сервер (порт выбирается динамически для предотвращения конфликтов с IIS). Затем запускается браузер по умолчанию и ему передается URL, указывающий на запущенный Web-сервер. Тестовый сервер запускается только на время работы Visual Studio, его значок помещается в панель задач. При необходимости получить сведения о тестовом сервере или завершить его работу до завершения работы Visual Studio можно воспользоваться контекстным меню.

При обнаружении ошибок информация о них выводится также как и при отладке Windows-приложений. Можно использовать пошаговые режимы и просмотр значений переменных.

Публикация.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: