类型转换错误:向自定义MembershipUser插入数据

5

我正在尝试使用以下代码填充数据到我的NCCMembershipUser

string name = User.Identity.Name;

NCCMembershipUser currentUser = (NCCMembershipUser)NCCMembershipProvider.GetUser(name, true);

currentUser.Salutation = GenderSelect.SelectedValue;
currentUser.FirstName = TextBoxFirstName.Text;
currentUser.LastName = TextBoxLastName.Text;
currentUser.Position = TextBoxPosition.Text;
...

try
{
    NCCMembershipProvider u = (NCCMembershipProvider)Membership.Provider;
    u.UpdateUser(currentUser);
}

我遇到了一个错误,提示信息是“对于非静态字段、方法或属性 'System.Web.Security.MembershipProvider.GetUser(string, bool)',需要对象引用”

如果我使用Membership.GetUser()(不带name字符串)来访问当前用户,则会出现转换错误,并且GetUser()似乎无法被覆盖。

编辑:

我得到的转换错误是“[A]NCC.App_Code.NCCMembershipProvider 无法转换为 [B]NCC.App_Code.NCCMembershipProvider”。

2个回答

3
错误提示您,GetUser方法不是静态的,因此它不能在没有NCCMembershipProvider类实例的情况下调用。
您需要在方法中较早地获取提供程序:
string name = User.Identity.Name;
NCCMembershipProvider u = (NCCMembershipProvider)Membership.Provider;

NCCMembershipUser currentUser = (NCCMembershipUser)u.GetUser(name, true);

currentUser.Salutation = GenderSelect.SelectedValue;
currentUser.FirstName = TextBoxFirstName.Text;
currentUser.LastName = TextBoxLastName.Text;
currentUser.Position = TextBoxPosition.Text;
// ...

try
{
    u.UpdateUser(currentUser);
}

这让我想起了我在问题中提到的强制转换错误。"[A]NCC.App_Code.NCCMembershipProvider 无法转换为 [B]NCC.App_Code.NCCMembershipProvider" - RyanJMcGowan
我觉得我不得不绕过提供程序,只是使用数据源控件。似乎没有人知道如何解决这个问题。这应该很简单的。 - RyanJMcGowan

1
我得到的转换错误是“[A]NCC.App_Code.NCCMembershipProvider无法转换为[B]NCC.App_Code.NCCMembershipProvider。”
对于此错误,请验证您的App_Code文件夹中是否有该类,如果有,请将其移动到其他位置,例如名为Membership的新文件夹。
这将解决转换问题,因为应用程序将2个不同的DLL编译到临时asp.net文件夹的2个不同位置。

1
我创建了一个名为NCCMembership的文件夹,这样就不会出现System.Web.Security中的Membership命名空间问题了。但是这个方法起作用了。谢谢。 - RyanJMcGowan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接