Какой метод CreateUserWizard вызывает Membership.CreateUser? - PullRequest
0 голосов
/ 21 октября 2009

Я создал пользовательский поставщик членства с пользовательским методом 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
            }
        }

А теперь я хочу использовать элемент управления Create User Wizard для вставки пользователей с этим дополнительным полем. Я расширил контроль до чего-то вроде этого:

     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 голосов
/ 21 октября 2009

Это что-то вроде хакерства, но вы можете сделать следующее:

            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 с пользовательским поставщиком безопасности.

...