2009-10-21 96 views
0

我做了一個自定義成員資格提供,與接受多一個參數,像這樣的定製CREATEUSER方法:CreateUserWizard的什麼方法調用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中的方法來防止第二次調用?

在此先感謝

回答

0

這有點哈克,但你可以做到以下幾點:

  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與自定義安全提供程序時使用了類似的方法。

相關問題