简体   繁体   English

CreateUserWizard的哪种方法称为Membership.CreateUser?

[英]What method of CreateUserWizard calls the Membership.CreateUser?

I made a Custom Membership Provider, with a custom CreateUser method that accepts one more argument, like this: 我做了一个自定义成员资格提供,与接受多一个参数,像这样的定制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
            }
        }

And now i want to use the Create User Wizard control to insert users, with that extra field. 现在,我想使用“创建用户向导”控件来插入带有该额外字段的用户。 I have extended the control to something like this: 我已经将控件扩展到如下所示:

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

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

The problem is that after this OnCreatingUser is called, the control calls the provider's default CreateUser (the one that does nothing) method internally, throwing an error because the user was already inserted... 问题在于,在调用此OnCreatingUser之后,控件会在内部调用提供程序的默认CreateUser方法(不执行任何操作),因为已插入用户而引发错误。

Its possible to prevent the second call, by overriding a method in the CustomCreateUser? 它可以防止第二个电话,通过覆盖在CustomCreateUser的方法?

Thanks in advance 提前致谢

This is sort of hacky, however you could do the following: 这有点hacky,但是您可以执行以下操作:

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

e.Cancel = true;
            }

Inside of the AttemptCreateUser code 在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...

This should override the default behavior of AttemptCreateUser since it will return false. 这将覆盖AttemptCreateUser的默认行为,因为它将返回false。 This was untested but i used a similar method when using the LoginControl with a custom security provider. 这未经测试,但与自定义安全提供程序一起使用LoginControl时,我使用了类似的方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 扩展Membership.CreateUser方法的参数 - Extending parameters for Membership.CreateUser method Membership.CreateUser适用于多个会员提供商 - Membership.CreateUser for multiple Membership Providers 对Membership.CreateUser抛出“没有错误。” - “No Error.” thrown on Membership.CreateUser 使用Membership.CreateUser时数据在哪里保留? - Where is data persisted when using Membership.CreateUser? ASP.Net在调用Membership.CreateUser()时设置正确的连接字符串 - ASP.Net Setting the correct Connection String when calling Membership.CreateUser() ASP.NET MVC 3 单元测试 Membership.CreateUser 总是返回 MembershipCreateStatus 错误 - ASP.NET MVC 3 unit tests for Membership.CreateUser always return MembershipCreateStatus error 通过Membership.CreateUser创建用户时,是否有一个.NET包装器可以设置用户的地址,城市,州,邮政编码等? - When creating a user by Membership.CreateUser, is there a .NET wrapper that can set the user's address, city, state, zip, etc.? C#asp.net自定义MembershipUser.createUser()方法,从createuserwizard控件调用 - C# asp.net custom MembershipUser.createUser() method, call it from createuserwizard control 成员资格CreateUser和相关表 - Membership CreateUser and related tables CreateUserWizard asp.net中CreateUSer按钮的唯一ID - Unique ID of CreateUSer Button in CreateUserWizard asp.net
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM