6

ho avviato un sito basato su asp.net MVC 3 e MySql ho ottenuto l'appartenenza a lavorare con il connettore MySQL .NET quindi con l'applicazione predefinita si ottiene con un nuovo progetto di mvc 3 ho un modulo di registrazione di lavoro e un modulo di login funzionanteaggiungendo più campi al modulo di registrazione utilizzando l'appartenenza su MySql e MVC 3

ma ... come faccio ad aggiungere più campi al modulo di registrazione? so come aggiungere loro il mio modello e alla pagina .. ma come faccio a fare in modo che l'appartenenza mantenga questi nuovi dati male per l'utente? dovrò fare le colonne nel database da solo? o l'appartenenza sa come crearli automaticamente in qualche modo?

voglio solo altri 3 campi per la registrazione ...

grazie

risposta

8

io vi suggerisco questo solu zione.

  1. Creare una tabella denominata UserDetails
  2. Aggiungere un campo che punta alla UserId

Il gioco è fatto.

Ora è necessario un corso per recuperare i campi in base allo UserId. È inoltre possibile implementare il proprio MembershipProvider e aggiungere un metodo come GetUserDetail() che restituisce un oggetto contenente i campi aggiuntivi.

questo si basa su un articolo ufficiale ASP.NET: http://www.asp.net/web-forms/tutorials/security/membership/storing-additional-user-information-cs

+0

Dove scrivere codice per inserire valori in UserDetails mentre Processo di registrazione? Perché non vedo alcun codice di inserimento in Account/Register.aspx.cs –

9

dare un'occhiata al vostro file di AccountModels.cs. Contiene

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; } 
} 

Una volta aggiunta una nuova proprietà nel modello, è necessario aggiornare la visualizzazione. Nella Vista> Account> Register.cshtml si dovrebbe aggiungere

 <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> 

Quando hai finito con che è necessario aggiornare la logica di registrazione per utilizzare la nuova proprietà. Vai a AccountController e trovare

[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); 
    } 

Se si vuole persistere queste informazioni per gli utenti ASP.NET profilo, avete bisogno di questo nel 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> 

Poi nel codice - si può fare

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

per ottenere/impostare le proprietà di profilo

+0

è stato scritto da: // questo sarebbe un buon posto per voi a mettere il codice per fare qualcosa con model.Nickname ma ciò che il codice sarà che essere ..? . un'altra chiamata al database? questo non ha risolto la mia domanda su come posso fare l'appartenenza farlo. ho letto qualcosa sulla base del profilo. è che esso? .. è l'unico modo 2 chiama al database? –

+0

Sta a te decidere come gestire la parte di persistenza dei dati. Puoi utilizzare Profili (che alcuni non sono abbastanza flessibili) oppure puoi inizializzare il tuo DataContext. Vedere la risposta aggiornata – torm

+1

Dopo aver eseguito 'userProfile.SetPropertyValue (" Nickname "," my nickname ");' esegui 'userProfile.Save()' per la persistenza. – bennedich

0

si supponga di voler creare campi per età e sesso. puoi prima creare l'interfaccia utente per la registrazione nella corrispondente vista di registrazione. significa creare campi di input per Età e Sesso. quindi in AccountController vai a Registra vista e aggiungi i campi Età e Sesso nell'oggetto ApplicationUser (che è già dichiarato). E tu ci vai.

Informazioni dettagliate su questo si possono trovare http://blog.falafel.com/customize-mvc-5-application-users-using-asp-net-identity-2-0/

Problemi correlati