【问题标题】:What method of CreateUserWizard calls the Membership.CreateUser?CreateUserWizard 的什么方法调用 Membership.CreateUser?
【发布时间】:2009-10-21 15:37:35
【问题描述】:

我创建了一个自定义成员资格提供程序,其中包含一个自定义 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 中的方法来阻止第二次调用?

提前致谢

【问题讨论】:

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


    【解决方案1】:

    这有点骇人听闻,但是您可以执行以下操作:

                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 与自定义安全提供程序一起使用时,我使用了类似的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多