Где я храню дополнительные пользовательские детали с помощью ASP.NET MVC и SqlMembershipProvider?

Когда я разрабатываю свое расположение с помощью CSS, я обычно даю каждому главному разделу его собственный корень (уровень тела) отделение и использую относительное/абсолютное расположение для получения его в его надлежащее место. Это немного более гибко, чем таблицы, поскольку я не ограничен расположением, что я могу представить строки использования и столбцы.

, Кроме того, если я решаю, что хочу перестроить расположение (говорят, что я хочу, чтобы панель навигации была справа теперь), я могу просто пойти и изменить положение для элементов в одном месте (файл CSS), и HTML не должен изменяться. Если бы я делал это с таблицами, я должен был бы войти и найти информацию и сделать большую модификацию атрибута и копирование и вставку для получения того же эффекта.

На самом деле, с помощью CSS, у меня может даже быть мой пользователи выбор, как они хотят, чтобы их расположение работало. Пока общий размер предметных областей не изменяется, я соглашаюсь совершенно с использованием небольшого количества PHP, пишущего сценарий для вывода моего CSS на основе пользовательских настроек, и позволяющий им перестроить сайт к их собственной симпатии. Еще раз, возможный с таблицами, но намного намного тяжелее поддержать.

Наконец, CSS позволяет одно ГЛАВНОЕ преимущество, которое никогда не будут предоставлять таблицы: способность переформатировать на основе содержимого на дисплее. CSS позволяет мне использовать совершенно другой набор стиля (включая положение, форматирование, и т.д.) для принтера, чем тот, который я использую для монитора. Это может быть расширено на другие медиа также, превосходным примером является Opera Show, который позволяет умно разработанный (и очень стандартный), CSS улучшил страницу, которая будет просматриваться как показ слайдов.

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

8
задан KingNestor 16 July 2009 в 19:58
поделиться

3 ответа

Здесь на помощь приходит провайдер профиля ASP.NET. Его можно использовать для хранения любой информации профиля о пользователе, которую вы хотите. Все, что вам нужно сделать, это добавить нужные поля в файл web.config, Ссылка MSDN о том, как настроить поля профиля в файле web.config . Подводя итоги статьи, вы просто добавляете значения имени и типа, которые хотите сохранить, в узел свойств элемента профиля. Вот пример:

<profile enabled="true">
  <properties>
    <add name="Name" />
    <group name="Address">
      <add name="Street" />
      <add name="City" />
      <add name="Zip" type="System.Int32" />
    </group>
  </properties>
</profile>

В веб-формах ASP.NET Visual Studio автоматически создает строго типизированный класс профиля, который будет ссылаться на ваши настраиваемые свойства профиля. В MVC этого не происходит. Чтобы обратиться к информации профиля пользователя, просто вызовите HttpContext.Profile ["PropertyName"]. Пример:

HttpContext.Profile["Name"] = name;
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip;

Изменить: Как заметил Энди, использование SqlProfileProvider по умолчанию isn ' Это действительно хорошо, если вы хотите выполнять запросы по этим свойствам. Он совершенно прав, и, возможно, мне следовало изначально отметить это ограничение. Это ограничение существует потому, что SqlProfileProvider хранит все данные профиля в трех столбцах: PropertyNames и PropertyValuesString / PropertyValuesBinary. Все ключи хранятся в поле PropertyNames, значения, которые могут быть сохранены в виде строки, хранятся в поле PropertyValuesString и т. Д. Это означает, что чрезвычайно сложно выполнить запрос типа «Выбрать * из aspnet_Profile, где возраст> 10».

3
ответ дан 5 December 2019 в 19:02
поделиться

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

Во-первых, вы должны признать, что членство и профили - это две разные вещи. Функции членства, профиля и роли ASP.NET предназначены для использования в качестве службы, обслуживающей несколько сайтов / приложений.

Если вы посмотрите на схему этих отношений, вы заметите, что пользователи уникальны для системы, но пользователя можно использовать в разных приложениях. Это означает, что информация об их профиле также используется в приложениях. Членство на самом деле является ассоциацией пользователя с приложением и содержит информацию об их отношении к этому конкретному приложению (пароль, пароль, вопросы и ответы и т. Д.).

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

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

Другой вариант - вы можете рассматривать его как службу и отслеживать эту информацию самостоятельно, ссылаясь на реализацию вашего собственного профиля, используя идентификатор пользователя из поставщик asp.net sql.

Есть хорошая серия (16 частей) по Членству, профилям и ролям на сайте 4 парней из Роллы, которые я

3
ответ дан 5 December 2019 в 19:02
поделиться

Эта статья из журнала CODE помогла мне решить эту проблему.

1
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: