Я использую SqlMembershipProvider по умолчанию, но я создал собственный класс MembershipUser (SoeMembershipUser), потому что мне нужно свойство «DisplayName».Все, что делает DisplayName, это смотрит на UserName и форматирует его по-разному.
Когда я пытаюсь привести MembershipUser к пользователю SoeMembershipUser, я получаю InvalidCastException.Точная ошибка: «Невозможно привести объект типа« System.Web.Security.MembershipUser »к типу« Soe.Tracker.SoeMembershipUser ».»
Вот код, который завершается ошибкой:
SoeMembershipUser user = (SoeMembershipUser)Membership.GetUser(username); // invalid cast
Я также попробовал приведение позже так:
MembershipUser user = Membershipship.GetUser(username); // ok
...
string displayName = ((SoeMembershipUser)user).DisplayName; // invalid cast
Вот класс SoeMembershipUser: ПРИМЕЧАНИЕ. Сначала я остановил конструкторы, но добавил их позже, когда у меня возникли проблемы.Добавление их не имело никакого значения.
public class SoeMembershipUser : MembershipUser
{
public SoeMembershipUser()
: base()
{
}
public SoeMembershipUser(string providerName, string name,
Object providerUserKey, string email, string passwordQuestion,
string comment, bool isApproved, bool isLockedOut,
DateTime creationDate, DateTime lastLoginDate,
DateTime lastActivityDate, DateTime lastPasswordChangedDate,
DateTime lastLockoutDate)
: base(providerName, name, providerUserKey, email,
passwordQuestion, comment, isApproved, isLockedOut,
creationDate, lastLoginDate, lastActivityDate,
lastPasswordChangedDate, lastLockoutDate)
{
}
public virtual string DisplayName
{
get
{
if (UserName.Contains("@"))
return UserName.Substring(0, UserName.IndexOf("@"));
return UserName;
}
}
}
Есть идеи, почему этот акт неверен?Я просто пропускаю что-то простое?