Создание динамического пользовательского интерфейса ASP.NET, управляемого данными - Создание нового клиента
ОГЛАВЛЕНИЕ
Создание нового клиента
Наше веб-приложение моделирует клиентскую информацию используя три таблицы базы данных:
- Clients - содержит фиксированные атрибуты клиентов - те, которые считаются общими для клиентов всех юридических фирм (такие, как ClientId, CustomerId, FirstName и LastName).
- DynamicAttributesForClients - содержит набор специализированных клиентских атрибутов для каждой юридической компании. Во второй части мы рассмотрели способ создания веб-интерфейса для добавления и управления данными атрибутами.
- DynamicValuesForClients - данная таблица содержит значения специализированных клиентских атрибутов конкретных клиентов. К примеру, если юридическая компания имеет три специализированных клиентских атрибута - Date of Injury (Дата нанесения ущерба), Injured On Job Site (Ущерб нанесен на работе) и Cannot Work Because of Injury (Невозможность работы из-за нанесеных травм) , то конкретный клиент может иметь три записи в DynamicValuesForClients, например храня значения 4/1/2008, True и False для трех данных атрибутов.
Нам необходимо создать пользовательский веб-интерфейс для пользователей, чтобы они могли управлять клиентами. Он должен включать в себя возможность добавления, удаления и редактирования фиксированных и специализированных клиентских атрибутов. В идеале, данный интерфейс должен незаметно объединять фиксированные и специализированные атрибуты, создавая тем самым видимость того, что не существует различия между глобальными атрибутами (ClientId, FirstName и т.д.) и специализированными (Date of Injury, Injured On Job Site и т.д.). Тем не менее, это добавит нам больше забот, поэтому, для простоты, мы разделим пользовательский интерфейс на две страницы, которые хранят фиксированные и специализированные атрибуты. На одной странице пользователи могут создавать новых клиентов, указывая значения для фиксированных атрибутов, и, более того, они могут редактировать данные фиксированные атрибуты и удалять клиентов. Для того, чтобы управлять клиентскими специализированными атрибутами, пользователю понадобится посетить вторую страницу, которая перечисляет данные атрибуты, загружает информацию о текущем пользователе и позволяет редактировать ее. (И все же, немного постаравшись, вы можете объединить данные страницы в одну.)
Пример приложения (доступного в конце данной статьи) был обновлен и теперь включает себя страницу ~/Customers/Default.aspx. Данная страница использует элементы управления DetailsView и SqlDataSource, позволяющие добавлять новых клиентов в систему. Как уже упоминалось выше, при добавлении новых клиентов в систему, от пользователя требуют ввести фиксированные атрибуты, после чего новая запись добавляется к таблице модели фиксированных данных, Clients.
Я начал создание данной страницы с добавления элемента управления SqlDataSource со следующим выражением INSERT:
INSERT INTO [Clients] ([CustomerId], [FirstName], [LastName], [Email])
VALUES (@CustomerId, @FirstName, @LastName, @Email)
Обратите внимание на то, что у пользователя запрашивают ввести значения для параметров FirstName, LastName и Email. Значение CustomerId основано на том, к чему привязан на данный момент авторизированный пользователь (юридическая компания). Во второй части мы создали класс Helpers с методом GetCustomerIdForLoggedOnUser , который возвращает значение CustomerId на пользователя , авторизированного на данный момент. Значение параметра CustomerId устанавливается в событии ItemInserting элемента DetailsView:
Protected Sub dvAddClient_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvAddClient.ItemInserting e.Values("CustomerId") = Helpers.GetCustomerIdForLoggedOnUser() End Sub
После создания и настройки SqlDataSource, я привязал его к DetailsView и настроил DetailsView таким образом, что он поддерживает вставку данных. Данный DetailsView используется только для добавления новых клиентов; в следующей секции мы добавим GridView к странице для отображения клиентов. Чтобы DetailsView перманентно обрабатывал свой интерфейс вставки я установил его свойство DefaultMode в Insert. Наконец, я специализировал интерфейс вставки элемента DetailsView таким образом, чтобы он включал в себя элементы управления валидацией для полей FirstName, LastName и Email.
Следующее изображение демонстрирует элемент управления DetailsView при просмотре при помощи обозревателя.
