Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обработка ошибок




Если в процессе работы страницы было сгенерировано необработанное исключение, ASP.NET показывает «желтый экран смерти» ‑ стандартную страницу, содержащую информацию об ошибке. Естественно, в реальных приложениях желательно изменить данное поведение (хотя бы с точки зрения дружественного дизайна).

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

Рассмотрим пример обработчика события Error на странице.

protected void Page_Error(object sender, EventArgs e)

{

// перехватываем ошибку

var ex = Server.GetLastError();

// выбираем в зависимости от её типа страницу и делаем переход

if (ex is NotlmplementedException)

{

Server.Transfer("~/errorpages/notimplemented.aspx");

}

else

{

Server.Transfer("~/errorpages/apperror.aspx");

}

}

Объект, представляющий исключение, можно получить с помощью метода GetLastError() объекта Server. В обработчике события Error можно передать управление определенной странице и таким образом вывести персонализированное сообщение, индивидуальное для конкретной ошибки. При этом URL в адресной строке браузера не изменится, поскольку переключение страниц будет выполнено на сервере. Благодаря использованию метода Server.Transfer() информация об исключении сохранится, и страница с сообщением об ошибке сама сможет вызвать метод GetLastError(), чтобы вывести для пользователя максимально подробные сведения. После того как исключение будет полностью обработано, необходимо удалить объект-ошибку, вызвав метод Server.ClearError().

Обработчик события Error страницы перехватывает лишь ошибки, происходящие на этой странице. Если вы решили, что для всех страниц приложения будет использоваться один и тот же обработчик ошибок, то лучше создать глобальный обработчик ошибок на уровне приложения. Он будет перехватывать все необработанные исключения и перенаправлять их определенной странице ошибок. Такой обработчик реализуется в точности так же, как обработчик ошибок страницы. Добавьте в приложение файл global.asax и заполните кодом предопределенную заглушку Application_Error (подробнее о файле global.asax будет рассказано далее).

Для работы с ошибками можно использовать раздел <customErrors> файла web.config приложения.

<system.web>

<customErrors mode="RemoteOnly" />

</system.web>

Обязательный атрибут mode определяет, будет ли вывод пользовательских сообщений об ошибках включен, отключен или включен только для удаленных клиентов. По умолчанию он имеет значение RemoteOnly, при котором удаленные пользователи видят стандартную страницу с минимально информативным сообщением об ошибке, а локальные пользователи при этом получают сообщения ASP.NET с детальными описаниями ошибок.

Какое бы значение не было выбрано для атрибута mode, стандартные страницы ASP.NET с сообщениями об ошибках не порадуют информативностью. Для того чтобы выводить более профессиональные и дружественные пользователю сообщения, которые были бы согласованы с общим интерфейсом сайта, необходимо включить в файл web.config такие установки:

<system.web>

<customErrors mode="RemoteOnly"

defaultRedirect="GenericError.aspx" />

</system.web>

После этого, какой бы ни была ошибка, ASP.NET станет переадресовывать пользователя на страницу GenericError.aspx[16], содержимое и структура которой всецело определяются разработчиком. Это происходит благодаря необязательному атрибуту defaultRedirect, в котором задается страница с сообщением об ошибке. Если атрибут mode установлен в On, и локальные, и удаленные пользователи перенаправляются на стандартную страницу с сообщением об ошибке. Если же этот атрибут установлен в RemoteOnly, удаленные пользователи перенаправляются на указанную вами страницу, а локальные (которыми обычно являются разработчики) ‑ на выводимую по умолчанию.

Перенаправление пользователей к единой для всех ошибок странице ‑ не единственная возможность, которую предоставляет ASP.NET; эта система позволяет задать отдельную страницу для каждой из ошибок HTTP. Соответствие между страницами с сообщениями об ошибках и кодами состояния HTTP также определяется в web.config. Для раздела <customErrors> поддерживается внутренний тэг <error>, который можно использовать для связывания кодов состояния HTTP с пользовательскими страницами ошибок.

<customErrors mode="RemoteOnly"

defaultRedirect="GenericError.aspx" >

<error statusCode="404" redirect="Error404.aspx" />

<error statusCode="500" redirect="Error500.aspx" />

</customErrors>

В атрибуте statusCode этого тэга задается код ошибки HTTP, а в атрибуте redirect – страница, куда в случае возникновения такой ошибки должен быть перенаправлен пользователь.

5.13. Связывание с данными

Под связыванием данных (data binding) будем понимать помещение данных из некоего источника в элемент управления на странице. При разработке страницы применение связывания подразумевает два этапа:

· указание на странице или в свойстве элемента управления источника данных;

· собственно связывание, то есть перенос данных в элемент управления.

Элементы управления, поддерживающие связывание, имеют в своем составе метод DataBind() для выполнения связывания. Вызов метода DataBind() у родительского элемента управления автоматически ведет к вызову этого метода у дочерних элементов. В частности, вызов DataBind() страницы обеспечивает связывание для всех её элементов.

Будем выделять два вида связывания данных: одиночное и итеративное. Итеративное связывание подразумевает связывание элемента управления с источником, содержащим некоторую коллекцию данных. Элементы управления, пригодные для итеративного связывания, как правило, представляют собой разновидности списков или таблиц. Все они имеют общие свойства, перечисленные в табл. 25.

Таблица 25

Общие свойства, относящиеся к связыванию данных

Свойство Описание
DataSource Задаёт источник данных. В роли источника может выступать любой перечислимый объект. При вызове DataBind() выполняется проход по коллекции DataSource, и данные перемещаются в локальное хранилище элемента управления, чтобы затем использоваться для построения разметки элемента
DataSourceID Позволяет указать идентификатор объекта-источника данных (о таких объектах будет подробнее рассказано ниже) «
DataMember При помощи свойства конкретизируется коллекция данных, в том случае, если DataSource обладает несколькими пригодными для связывания данных наборами. (типичный пример: DataSource содержит рассоединённый набор данных DataSet, а DataMember указывает на таблицу для связывания)
DataTextField Имя столбца источника данных, в котором содержатся значения, подлежащие выводу в качестве элементов списка. Обычно используется списочными элементами управления
DataValueField Определяет, какое поле источника данных надо использовать для заполнения набора данных списочного элемента управления
AppendDataBoundItems Булево свойство; указывает, нужно ли добавлять загружаемые в элемент управления новые данные в конце существующего набора его данных «
DataKeyField Ключевое поле источника данных. Оно используется табличными элементами управления ASP.NET 1.0 и позволяет им идентифицировать запись

При выполнении связывания данных ASP.NET позволяет указывать в разметке страницы специальные выражения связывания с данными. Выражения связывания с данными ‑ это исполняемый код, заключенный внутрь специальной конструкции <% %> и начинающийся с символа-префикса #. Обычно такие выражения используются для установки значения атрибута в тэге серверного элемента управления. Например, в следующем фрагменте кода разметки формируется надпись, содержащая текущее время:

<asp:Label ID="date" runat="server" Text="<%# DateTime.Now %>" />

Внутри конструкции <%# %> можно вызывать методы страницы, а также методы и свойства компонентов страницы, лишь бы тип результирующего значения отвечал типу свойства, которому вы его присваиваете. Любое выражение связывания с данными вычисляется лишь после вызова метода DataBind(). Если метод DataBind() не вызывается, выражение не вычисляется.

При применении выражений связывания с данными внутри списковых и табличных элементов управления часто используется класс DataBinder. Он позволяет генерировать выражения связывания с данными и осуществлять их разбор. В этом отношении особо важен его перегруженный статический метод Eval(). Данный метод, используя технологию отражения, выполняет синтаксический анализ выражения и вычисляет его значение. Синтаксис вызова метода DataBinder.Eval() обычно бывает таким:

<%# DataBinder.Eval(контейнер. DataItem, выражение) %>

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

Классический синтаксис вызова DataBinder.Eval() в ASP.NET 2.0 может быть несколько упрощен. Эквивалентом предыдущего выражения в ASP.NET 2.0 является выражение <%# Eval(выражение) %>.

ASP.NET 2.0 вводит новый тип выражений для связывания с данными – динамические выражения. В основе динамических выражений лежит новое семейство компонентов ‑ построители выражений. Синтаксис динамических выражений подобен синтаксису выражений связывания с данными, но вместо символа # в качестве префикса в них используется символ $. Такие выражения анализируются при компиляции страницы. Выражение извлекается из её исходного кода, преобразуется в код на языке программирования и вставляется в класс страницы. Существует несколько предопределенных построителей выражений:

§ AppSettings:XXX ‑ возвращает значение заданной установки из раздела <appSettings> конфигурационного файла.

§ ConnectionStrings:XXX[.YYY] ‑ возвращает строку XXX из раздела <connectionStrings> конфигурационного файла. Необязательный параметр YYY позволяет указать, какой атрибут вас интересует ‑ connectionString (по умолчанию) или providerName.

§ Resources:XXX,YYY ‑ возвращает значение глобального ресурса YYY, прочитанное из.resx-файла ресурсов XXX.

Точный синтаксис выражения определяется конкретным построителем, но в общем случае декларативное связывание свойств элементов управления с данными осуществляется следующим образом: атрибут=<%$ выражение %>.

5.14. Списковые элементы управления

Списковые элементы управления обеспечивают различные способы представления списков и таблиц. Название и назначение списковых элементов приведено в табл. 26.

Таблица 26

Списковые элементы управления

Элемент Описание
BulletedList Вывод элемента управления состоит из HTML-тэгов <ul> и <ol>, то есть представляет собой маркированный или нумерованный список «
CheckBoxList Создает HTML-элемент <table> или простой список, содержащий HTML-флажки
DropDownList Создает на странице элемент <select> с атрибутом size="1", то есть раскрывающийся список с одной видимой строкой
ListBox Создает элемент <select> с атрибутом size="n", чтобы построить обычное поле списка с единичным или множественным выбором и более чем одной видимой строкой
RadioButtonList Создает HTML-элемент <table> или простой список, содержащий HTML-переключатели

Все списковые элементы управления имеют общего предка – класс ListControl. Полезные свойства данного класса описываются в табл. 27.

Таблица 27

Свойства класса ListControl

Имя свойства Описание
AppendDataBoundItems Булево значение; указывает, нужно ли добавлять загружаемые в элемент управления новые данные в конце существующего набора его данных «
AutoPostBack Булево значение; показывает, будет ли страница автоматически отправляться на сервер при изменении пользователем выбора в списке
DataMember Имя таблицы в DataSource
DataSource Источник данных для значений списка при заполнении списка путем связывания данных
DataTextField Имя поля в DataSource, содержимое которого будет отображаемым текстом элементов списка
DataTextFormatString Строка форматирования для значений из DataTextField (например, {0:C} для денежных сумм)
DataValueField Имя поля в DataSource, содержимое которого будет значением элементов списка (свойство Value объекта ListItem)
Items Коллекция элементов ListItem, содержащихся в списке
SelectedIndex Индекс первого выбранного элемента в списке[17]
SelectedItem Ссылка на первый выбранный элемент ListItem
SelectedValue Значение первого выбранного элемента ListItem. Если у элемента задано свойство Value, то возвращается именно оно. Иначе возвращается значение свойства ListItem.Text

Кроме описанных свойств класс ListControl предоставляет серверное событие SelectedIndexChanged. Оно генерируется, когда выбор в списке изменяется и страница пересылается на сервер.

Отдельные элементы списка данных хранятся в коллекции Items и представлены объектами класса ListItem. Свойство Text этого класса содержит выводимый текст элемента, свойство Value задает ассоциируемое с элементом значение, а булево свойство Selected указывает, выбран ли элемент. Статический метод ListItem.FromString() возвращает объект ListItem, созданный на основе строки-параметра.

Коллекцию Items можно заполнить посредством связывания данных или декларативно, используя набор тэгов <asp:ListItem>, размещаемых в контейнере спискового элемента управления. Ниже показан пример описания на странице элемента BulletedList.

<asp:BulletedList ID="myList" runat="server" BulletStyle="Square">

<asp:ListItem Value="1" Text="One" />

<asp:ListItem Value="2" Text="Two" />

<asp:ListItem Value="3" Text="Three" />

</asp:BulletedList>

Каждый списковый элемент добавляет к своему базовому классу некоторые специфичные свойства и методы. Элементы управления CheckBoxList и RadioButtonList содержат свойства CellPadding ‑ расстояние в пикселях между рамкой и ячейкой; CellSpacing ‑ расстояние в пикселях между ячейками; RepeatColumns – количество выводимых столбцов; RepeatDirection – вывод списка по горизонтали или вертикали; RepeatLayout ‑ значение, определяющее способ вывода элемента управления (Table (в виде таблицы) или Flow (просто группа элементов)), TextAlign – выравнивание текста. У класса ListBox имеется свойство Rows, содержащее число видимых строк элемента, и SelectionMode, определяющее, допустим ли множественный выбор. Элемент управления BulletedList позволяет настроить стиль маркера или номера (свойство BulletStyle), указать путь к изображению, которое будет использоваться в качестве маркера (свойство BulletImageUrl), и настроить значение, с которого будет начинаться нумерация (свойство FirstBulletNumber).

5.15. Элементы управления для Источников данных

Элементы управления для представления источников данных – это компоненты ASP.NET, которые служат оболочкой для реальных источников данных и допускают гибкую декларативную настройку. Всего имеется шесть таких элементов управления: SqlDataSource, AccessDataSource, ObjectDataSource, LinqDataSource, XmlDataSource и SiteMapDataSource. Первые четыре предназначены для работы с табличными источниками данных, оставшиеся – для работы с иерархическими данными (XML). SiteMapDataSource представляет собой специальный элемент управления, работающий с файлами навигации по сайту, а AccessDataSource – специальную реализацию SqlDataSource для работы с базами данных Access. Далее будет подробнее рассмотрена работа с SqlDataSource и ObjectDataSource.




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 522; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.084 сек.