Книга: C# для профессионалов. Том II

Преобразование приложения предварительного заказа мероприятия в элемент управления пользователя

Преобразование приложения предварительного заказа мероприятия в элемент управления пользователя

В большинстве случаев преобразование страницы ASP.NET в элемент управления пользователя выполнить легко, так как можно просто скопировать требуемый код в пустые файлы .ascx и ascx.cs. Можно даже выйти из положения в некоторых случаях, просто изменяя имя файла на .ascx, если поместить весь код C# в этот файл, а не использовать режим "code behind".

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

Это приложение использует переменную уровня приложения для множества данных, которая содержит таблицы данных мероприятий, участников и названий помещений. Если желательно использовать эту переменную таким же образом, нам понадобиться в этом проекте поместить код для извлечения множества данных в файле global.asax. То есть нам еще нужно добавить в проект ссылку Web на требуемую службу Web.

Существуют другие изменения, которые необходимо сделать, чтобы учесть факт, что элемент управления имеет базовый класс UserControl, а не Form. Например, UserControl не имеет коллекции Validators, поэтому невозможно просмотреть объекты Validator в этой коллекции с помощью кода, который использовался ранее:

protected void submitButton_click(object sender, System.EventArgs e) {
 foreach (System.Web.UI.WebControls.WebControl validator in this.Validators) {
  validator.Enabled = true;
 }
 this.Validate();
 if (this.IsValid) {
  ...

Вместо этого необходимо использовать следующий подход:

protected void submitButton_Click(object sender, System.EventArgs e) {
 validateEvent.Enabled = true;
 validateRoom.Enabled = true;
 validateName.Enabled = true;
 validateAttendees.Enabled = true;
 validateEvent.Validate();
 validateRoom.Validate();
 validateName.Validate();
 validateAttendees.Validate();
 if (validateAttendees.IsValid && validateEvent.IsValid &&
     validateRoom.IsValid && validateName.IsValid) {
  ...

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

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

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

Оглавление книги


Генерация: 1.616. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз