2009-10-21 3 views
0

Я сделал поставщика пользовательского членства, с помощью пользовательского метода CreateUser, который принимает еще один аргумент, как это:Какой метод CreateUserWizard вызывает Memberhip.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?

Заранее спасибо

ответ

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

Смежные вопросы