我使用的是默认的SqlMembershipProvider,但我创建了一个自定义的MembershipUser类(SoeMembershipUser),因为我需要一个“DisplayName”属性。所有DisplayName都会查看UserName并以不同的格式进行格式化。无法将MembershipUser投射到自定义类(ASP.NET)
当我尝试将一个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;
}
}
}
任何想法为何此演员表无效?我只是俯视简单的东西?
你能发布实际无效的转换错误信息吗? – 2010-10-15 20:02:45
我在上面添加了确切的错误消息。堆栈跟踪没有显示任何异常情况。 – Rick 2010-10-15 20:08:58