J'utilise le SqlMembershipProvider par défaut, mais j'ai créé une classe MembershipUser personnalisée (SoeMembershipUser) car j'avais besoin d'une propriété "DisplayName". Tout ce que DisplayName fait est de regarder le nom d'utilisateur et le formater différemment.Impossible de convertir MembershipUser en classe personnalisée (ASP.NET)
Lorsque j'essaie de convertir un MembershipUser en utilisateur SoeMembershipUser, j'obtiens une exception InvalidCastException. L'erreur exacte est: "Impossible de convertir un objet de type 'System.Web.Security.MembershipUser' en type 'Soe.Tracker.SoeMembershipUser'."
Voici le code qui échoue:
SoeMembershipUser user = (SoeMembershipUser)Membership.GetUser(username); // invalid cast
J'ai aussi essayé CASTING plus tard comme ceci:
MembershipUser user = Membershipship.GetUser(username); // ok
...
string displayName = ((SoeMembershipUser)user).DisplayName; // invalid cast
Voici la classe SoeMembershipUser: REMARQUE: je l'ai laissé les constructeurs au premier , mais les a ajoutés plus tard quand j'ai commencé à avoir des problèmes. Les ajouter n'a fait aucune différence.
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;
}
}
}
Une idée de la raison pour laquelle cette distribution n'est pas valide? Suis-je en train de négliger quelque chose de simple?
Pouvez-vous envoyer le message d'erreur de distribution valide? –
J'ai ajouté le message d'erreur exact ci-dessus. La trace de pile ne montre rien hors de l'ordinaire. – Rick