【发布时间】:2010-10-15 19:58:09
【问题描述】:
我正在使用默认的 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;
}
}
}
知道为什么这个演员表无效吗?我只是忽略了一些简单的事情吗?
【问题讨论】:
-
你能发布实际的无效转换错误消息吗?
-
我在上面添加了确切的错误消息。堆栈跟踪没有显示任何异常。
标签: asp.net casting asp.net-membership membership membershipuser