CreateUserWizard调用Membership.CreateUser的方法是什么?

时间:2009-10-21 15:37:36

标签: c# asp.net asp.net-membership

我创建了一个自定义成员资格提供程序,其自定义CreateUser方法接受另一个参数,如下所示:

public class CustomMembershipProvider : MembershipProvider
        {
            // code

            public override MembershipUser CreateUser(string username,
                                                       string password, etc...)
            {
                  // does nothing
            }

            public MembershipUser MyCreateUser(string username,string password,string COMPANY, etc...)
            {
                  // validades the fields and inserts the user in the db
            }
        }

现在我想使用“创建用户向导”控件来插入具有该额外字段的用户。 我已将控件扩展为类似的内容:

     public class CustomCreateUser : CreateUserWizard
        {
            public CustomCreateUser(): base()
            {
            }

            protected override void OnCreatingUser(LoginCancelEventArgs e)
            {
                  MembershipUser newUser = ((CustomMembershipProvider)Membership.Provider).MyCreateUser(username,password,company, etc...)
            }
    }

问题是,在调用此OnCreatingUser之后,控件在内部调用提供程序的默认CreateUser(无效的方法)方法,因为用户已插入而引发错误...

可以通过覆盖CustomCreateUser中的方法来阻止第二次调用吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

这有点像hacky,但你可以做到以下几点:

            protected override void OnCreatingUser(LoginCancelEventArgs e)
            {
                  MembershipUser newUser = ((CustomMembershipProvider)Membership.Provider).MyCreateUser(username,password,company, etc...)

e.Cancel = true;
            }

AttemptCreateUser代码内部

private bool AttemptCreateUser()
{
    if ((this.Page == null) || this.Page.IsValid)
    {
        MembershipCreateStatus status;
        LoginCancelEventArgs e = new LoginCancelEventArgs();
        this.OnCreatingUser(e);
        if (e.Cancel)
        {
            return false;
        }
....More code...

这应该覆盖AttemptCreateUser的默认行为,因为它将返回false。 这是未经测试的,但在将LoginControl与自定义安全提供程序一起使用时,我使用了类似的方法。