У меня была такая же проблема сегодня, и я многому научился.
В Visual Studio существует два вида проектов - «Проекты веб-сайтов» и «Проекты веб-приложений». По причинам, которые являются для меня полной загадкой, проекты веб-приложений не могут использовать Profile. напрямую ... класс со строгой типизацией не создается магическим образом для вас из файла Web.config, поэтому вам нужно выполнить накат свой собственный.
В примере кода в MSDN предполагается, что вы используете проект веб-сайта, и они говорят вам просто добавить <profile>
раздел к вашему Web.config
и присоединиться к нему с Profile.
свойством , но это не работает в проектах веб-приложений.
У вас есть два варианта броска:
(1) Используйте Web Profile Builder . Это пользовательский инструмент, который вы добавляете в Visual Studio, который автоматически генерирует нужный вам объект профиля из вашего определения в Web.config.
Я решил не делать этого, потому что я не хотел, чтобы мой код зависел от этого дополнительного инструмента для компиляции, что могло вызвать проблемы у кого-то еще в будущем, когда они пытались построить мой код, не осознавая, что им нужно этот инструмент.
(2) Создайте собственный класс, производный от ProfileBase
, для представления вашего пользовательского профиля. Это проще, чем кажется. Вот очень простой пример, который добавляет поле строкового профиля «FullName»:
В вашем web.config:
<profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">
<providers>
<clear />
<add name="SqlProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="sqlServerMembership" />
</providers>
</profile>
В файле с именем AccountProfile.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Profile;
using System.Web.Security;
namespace YourNamespace
{
public class AccountProfile : ProfileBase
{
static public AccountProfile CurrentUser
{
get { return (AccountProfile)
(ProfileBase.Create(Membership.GetUser().UserName)); }
}
public string FullName
{
get { return ((string)(base["FullName"])); }
set { base["FullName"] = value; Save(); }
}
// add additional properties here
}
}
Чтобы установить значение профиля:
AccountProfile.CurrentUser.FullName = "Snoopy";
Для получения значения профиля
string x = AccountProfile.CurrentUser.FullName;