adding more fields to registration form using membership on MySql and MVC 3

i started a site based on asp.net MVC 3 and MySql
i got the membership to work with the MySQL .NET connector
so with the default application you get with a new project of mvc 3 i have a working register form and a working login form

but… how do i add more fields to the registration form?
i know how to add them my model and to the page.. but how do i make the membership keep this new data ill get for the user?
will i have to make the columns in the database by myself? or does membership knows how to create them automaticly somehow?

i only want 3 more fields for the registration…

thanks

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

take a look at your AccountModels.cs file. It contains

public class RegisterModel
{ 
   // User name, Email Adress, Password, Password confirmation already there

   // you can add something like below
    [Required]
    [Display(Name = "Nickname")]
    public string Nickname { get; set; }
}

Once you have a new property in your model you need to update the view. In the Views > Account > Register.cshtml you should add

        <div class="editor-label">
            @Html.LabelFor(m => m.Nickname )
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.Nickname )
            @Html.ValidationMessageFor(m => m.Nickname )
        </div>

When you’re done with that you need to update the registration logic to use your new property. Go to AccountController and find

    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
              //
              // this would be a good place for you to put your code to do something with model.Nickname
              //                    
              return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

If you want to persist that information to Users ASP.NET Profile, you need this in Web.config

<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
  <properties>
    <add name="Nickname" defaultValue="False" type="System.String" />
  </properties>
</profile>

Then in your code – you can do

var userProfile = ProfileBase.Create(model.UserName);

to get/set your properties in Profile

Method 2

I suggest you this solution.

  1. Create a table called UserDetails
  2. Add a field that point to the UserId

You’re done.

Now you need some class to retrieve thoses fields based on the UserId. You could also implement your own MembershipProvider and add a method like GetUserDetail() which return an object containing your extra fields.

This is based on an official ASP.NET article : http://www.asp.net/web-forms/tutorials/security/membership/storing-additional-user-information-cs

Method 3

Suppose you want to create fields for Age and Gender. you can first of all create UI for registration in the corresponding Registration view. it means creating input fields for Age and Gender. then in the AccountController go to Register view and add Age and Gender fields in ApplicationUser object (that is already declared). And there you go.

Detailed information on this can be found http://blog.falafel.com/customize-mvc-5-application-users-using-asp-net-identity-2-0/


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x