КАТЕГОРИИ: Архитектура-(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 Общие свойства, относящиеся к связыванию данных
При выполнении связывания данных 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 Списковые элементы управления
Все списковые элементы управления имеют общего предка – класс ListControl. Полезные свойства данного класса описываются в табл. 27. Таблица 27 Свойства класса ListControl
Кроме описанных свойств класс 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; Просмотров: 526; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |