• Microsoft .NET
  • ASP.NET
  • Создание динамического пользовательского интерфейса ASP.NET, управляемого данными

Создание динамического пользовательского интерфейса ASP.NET, управляемого данными - Приступаем к работе

ОГЛАВЛЕНИЕ

Приступаем к работе

По завершении первой части наше веб-приложение состояло только из базы данных в каталоге App_Data, которая реализовала модель данных нашего приложения и схему, необходимую для SqlMembershipProvider. В примере, доступном в конце статьи, вы увидите, что я добавил несколько аспектов пользовательского интерфейса, такие как:

  • Мастер-страница, которая реализует дизайн веб-сайта, основанный на CSS.
  • Файл карты сайта (Web.sitemap) с ссылками на различные секции сайта.
  • Страница авторизации, где пользователи могут авторизироваться и перейти к своей учетной записи.
  • Каталог Customers, который был сконфигурирован таким образом, что пользователи, обладающие специальными правами, могут посетить ASP.NET-страницы. В данном каталоге вы найдете страницу DefineClientAttributes.aspx, где пользователь может создать и управлять специализированными клиентскими атрибутами..
Статья детально исследует страницу DefineClientAttributes.aspx. Данная страница позволяет пользователям добавлять специализированные клиентские атрибуты, а также редактировать и удалять существующие. .

Определение связи между авторизированным на данный момент клиентом и пользователем

При посещении страницы DefineClientAttributes.aspx нам необходимо отобразить список клиентских атрибутов. Поскольку данные атрибуты специфичны для каждого клиента, то нам надо определить, к какому пользователю привязан на данный момент авторизированный клиент. Эта информация хранится в таблице ExtendedUserInfo, созданной в первой части данной серии статейй.

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

Я создал такой метод в классе, названном Helpers и находящемся в каталоге App_Code. Данный класс обладает единственной общедоступной функцией - GetCustomerIdForLoggedOnUser, которая может обратиться к базе данных, осуществить запрос к таблице ExtendedUserInfo и возвратить значение CustomerId, ассоциированное с пользователем, авторизировавшим себя. Вот полный код класса:

Imports System.Data.SqlClient

Public Class Helpers
   'Возврат значения CustomerId, ассоциированного с пользователем, авторизировавшим себя
   Public Shared Function GetCustomerIdForLoggedOnUser() As Guid
      Dim UserIdValue As Guid = Guid.Empty
      If Membership.GetUser() IsNot Nothing Then
         UserIdValue = Membership.GetUser().ProviderUserKey
      End If

      Using myConnection As New SqlConnection
         myConnection.ConnectionString = ConfigurationManager.ConnectionStrings("LawFirmConnectionString").ConnectionString

         Dim myCommand As New SqlCommand
         myCommand.Connection = myConnection
         myCommand.CommandText = "SELECT CustomerId FROM ExtendedUserInfo WHERE UserId = @UserId"
         myCommand.Parameters.AddWithValue("@UserId", UserIdValue)

         myConnection.Open()
         Dim customerId As Guid = CType(myCommand.ExecuteScalar(), Guid)
         myConnection.Close()

         Return customerId
      End Using
   End Function
End Class 

Значение UserIdавторизированного на данный момент пользователя можно получить при помощи Membership.GetUser().ProviderUserKey. Метод Membership.GetUser() возвращает информацию о клиенте. Свойства ProviderUserKey получает значение UserId. Данное значение используется для параметра @UserId в упомянутом выше выражении SELECT.