Я использую SqlMembershipProvider по умолчанию, но я создал собственный класс MembershipUser (SoeMembershipUser), потому что мне нужно свойство DisplayName. Все DisplayName делает это, смотря на UserName и форматируя его по-разному.Невозможно отменить членство в пользовательском классе (ASP.NET)
Когда я пытаюсь использовать членский член для пользователя 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;
}
}
}
Подумайте, почему данный аттестат не действителен? Я просто пропустил что-то простое?
Можете ли вы разместить сообщение об ошибке при неправильном литье? –
Я добавил сообщение об ошибке выше. Трассировка стека не показывает ничего необычного. – Rick