Search code examples
asp.net-mvc-3asp.net-membershipoverridingsqlmembershipprovider

Pass values to overriden CreateUser method of SqlMemebership Provider in MVC


I am working with ASP.NET Membership Providers. I am using SqlMembership Provider, I have overriden the CreateUser class as shown below.

As you can see I have a SportDetails fields which contains many values, this I want to use in the CreateUser method. How do I pass these values ? since these values are taken from ViewModel. Infact SportDetails is my viewModel for registration page.

public class CustomMembershipProvider : SqlMembershipProvider
{
    public SportsDetails SportsDetails { get; set; }

    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    {
        string.empty
        MembershipUser membershipUser = base.CreateUser(username, password, "", null,null, false, null, out status);

        // here is where I want to be able to use the value from Sports Details.

        return membershipUser;
    }
}

and my web.config

<membership defaultProvider="CustomMembershipProvider">
<providers>
    <clear/>        
    <add name="CustomMembershipProvider" type="Service.Security.CustomMembershipProvider" connectionStringName="my_db" requiresQuestionAndAnswer="false" enablePasswordRetrieval="false" enablePasswordReset="true" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" passwordFormat="Clear" passwordAttemptWindow="10" applicationName="myApp" />
</providers>
</membership>

Please help me out on this.


Solution

  • Found the answer the hard way ;)

    I used Interface for this.

    below is my interface used.

    public interface ISportsDetailer{
    
    public SportDetails SportsDetails { get; set; }
    
    }
    

    and then in my custom provider I had this Interface implemented as

    public class CustomMembershipProvider : SqlMembershipProvider, ISportsDetailer
    {}
    

    and to call CreateUser and pass these values before it, I used

    ((ISportsDetailer)Membership.Provider).SportsDetails = valueFromModel;
    

    Hope this helps some one in future :)