2014-04-26 2 views
0

J'utilise le modèle d'application Web ASP.NET et essaie de permettre à un utilisateur de choisir un rôle lors de l'enregistrement.Modification d'un rôle avec html select box asp.net mvc4

Voici ce que j'ai obtenu pour le moment.

-t-il

Voir

<fieldset class="col-lg-5 .col-md-5"> 
     <legend>Registration Form</legend> 
     <p> 
      @Html.LabelFor(m => m.UserName) 
      @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) 
     </p> 
     <p> 
      @Html.LabelFor(m => m.Password) 
      @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
     </p> 
     <p> 
      @Html.LabelFor(m => m.ConfirmPassword) 
      @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 
     </p> 
     <p> 
      @Html.DropDownListFor(model => model.Type, Model.TypeList) 
     </p> 

     <input type="submit" value="Register" class="btn btn-default" /> 
    </fieldset> 

Modèle

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    public string Type { get; set; } 

    public IEnumerable<SelectListItem> TypeList 
    { 
     get 
     { 
      return new List<SelectListItem> 
    { 
     new SelectListItem { Text = "athlete", Value = "athlete"}, 
     new SelectListItem { Text = "coach", Value = "coach"}, 
    }; 
     } 
    } 

} 

Contrôleur

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      try 
      { 
       WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
       Roles.AddUserToRole(model.UserName, model.Type); 
       WebSecurity.Login(model.UserName, model.Password); 

       return RedirectToAction("Index", "Home"); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
     } 

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

Je suis l'impression que je suis proche, mais je ne peux pas obtenir calme et Je reçois cette erreur

Message d'erreur du compilateur: Models.RegisterModel> 'ne contient pas de définition pour' DropDownListFor 'et la meilleure surcharge de méthode d'extension' System.Web.Mvc.Html.SelectExtensions.DropDownListFor (System.Web.Mvc.HtmlHelper, System .Linq.Expressions.Expression>, System.Collections.Generic.IEnumerable) 'a des arguments non valides

Répondre

0

Avez-vous initialisé votre modèle dans la méthode HttpGet Register? Comme ci-dessous ...

[AllowAnonymous] 
    public ActionResult Register() 
    { 
     var model = new RegisterModel(); 
     return View(model); 
    } 

je créer une application modèle MVC4 vide, a ajouté le code, a référence d'objet erreur non défini comme modèle par défaut de registre ne passe pas l'objet modèle pour voir que vous essayez d'accéder (à savoir le chargement TypeInt dans DropDownListFor()). J'ai ensuite initialisé le modèle dans la méthode Get comme indiqué ci-dessus. Tout fonctionne bien, j'ai été en mesure de choisir un rôle sur la vue de registre.

Vérifiez si cela aide.

+0

Ouiii maintenant le chargement! Cependant, il semble dire system.web.webpages.html.selectlist article dans la boîte de sélection des options. – user3317526

+0

Vous ne compreniez pas? Avez-vous encore des erreurs? Vous pouvez mettre à jour votre question avec plus de détails spécifiques. – SBirthare

0

un coup d'oeil votre dernière doit être retirée par des virgules:

new SelectListItem { Text = "athlete", Value = "athlete"}, 
new SelectListItem { Text = "coach", Value = "coach"}