значения строго типизированного профиля в членстве в ASP.NET (MVC)

Я использую ASP.NET MVC с входом на основе членства в течение нескольких лет, и все работает нормально (теперь это MVC3, но членство не изменилось по сравнению с первой версией, которая была MVC1). Теперь мне нужно добавить значение в профиль (только одно значение, которое используется очень редко - поэтому оно не гарантирует настраиваемого поставщика членства или настраиваемых таблиц)

Я получил это через profile.SetPropertyValue("myprop"), но мне бы очень хотелось, чтобы profile.myprop заработал. Является ли это возможным?

Я видел, как некоторые советуют иметь собственный класс MyProfile : ProfileBase и иметь myprop как свойство этого класса. По какой-то причине преобразование ProfileBase.Create(currentUser.UserName) в MyProfile дает мне ошибку (недопустимое преобразование).

Есть ли где-нибудь пример приложения ASP MVC с профилем, подобный этому Старый пост от ScottGu?




Ответы (1)


Джоэл Спольски дал отличный ответ на этот вопрос в этом посте. Вы в основном на правильном пути.

Если вы получаете сообщение об ошибке недопустимого приведения, скорее всего, это связано с проблемой в файле конфигурации. Убедитесь, что это включено; более конкретно раздел <profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">.

<profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">
    <providers>
         <clear />
         <add name="SqlProvider"
              type="System.Web.Profile.SqlProfileProvider"
              connectionStringName="sqlServerMembership" />
    </providers>
</profile>
person Bengel    schedule 29.09.2011
comment
Ну, это именно тот пост, о котором я имел в виду в третьем абзаце :) Но я получаю ошибку при приведении, когда использую ProfileBase.Create для класса MyProfile ... - person Felix; 30.09.2011
comment
Да, именно так и было. Не знаю, как я пропустил атрибут наследования в исходном посте. Вероятно, я кодировал web.config из документов MSDN, которые не относятся к веб-проектам. Кроме того, свойства профиля должны быть только в классе; не в веб-конфигурации. Наконец, в моей ситуации (которая, как мне кажется, является обычной) я заполняю свойства профиля, как в действии «Регистрация». Как ни странно, пользователь не вошел в систему в это время (даже после вызова SetAuthCookie(). Поэтому вместо использования статического свойства CurrentUser я создал статическую функцию NamedUser(string userName). - person Felix; 01.10.2011