Basé sur ce message Second answer J'ai essayé de créer une liste déroulante pour ma page de registre. La page Registre a un champ dans lequel vous pouvez sélectionner PossibleAccessRight
pour l'utilisateur tout en l'enregistrant, ce qui devrait être sauvegardé dans l'attribut AccessRight
.Erreur de liste déroulante MVC4
En ce moment je ne peux même pas montrer les éléments dropdownlist
Mon modèle ressemble à ceci
public class UserModel
{
public int UserId { get; set; }
[Required]
[EmailAddress]
[StringLength(100)]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email ID ")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[StringLength(20,MinimumLength = 6)]
[Display(Name = "Password ")]
public string Password { get; set; }
[Required]
[Display(Name = "First Name ")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name ")]
public string LastName { get; set; }
[Required]
[Display(Name = "Address ")]
public string Address { get; set; }
public List<string> PossibleRights;
[Required]
[Display(Name = "Access Rights")]
public string AccessRight { get; set; }
public UserModel()
{
PossibleRights = new List<string>()
{
{"High"},
{"Low"},
};
}
}
dans le contrôleur i ont ceci en méthode registeration qui est la méthode HttpPost
[HttpGet]
public ActionResult Register()
{
return View();
}
[HttpPost]
public ActionResult Register(Models.UserModel user)
{
var rights = new UserModel();
if (ModelState.IsValid)
{
using (var db = new DBaseEntities())
{
var crypto = new SimpleCrypto.PBKDF2();
var encrpPass = crypto.Compute(user.Password);
var sysUser = db.SystemUsers.Create();
sysUser.FirstName = user.FirstName;
sysUser.Email = user.Email;
sysUser.Password = encrpPass;
sysUser.PasswordSalt = crypto.Salt;
db.SystemUsers.Add(sysUser);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("","Login data is incorrect.");
}
return View(rights);
}
Voir pour cette méthode ressemble à ceci
<div class="editor-label">@Html.LabelFor(u=> u.FirstName)</div>
<div class="editor-field"> @Html.TextBoxFor(u=> u.FirstName)</div>
<br/>
<div class="editor-label">@Html.LabelFor(u=> u.LastName)</div>
<div class="editor-field"> @Html.TextBoxFor(u=> u.LastName)</div>
<br/>
<div class="editor-label">@Html.LabelFor(u=> u.Address)</div>
<div class="editor-field"> @Html.TextBoxFor(u=> u.Address)</div>
<br/>
<div class="editor-label">@Html.LabelFor(u=> u.Email)</div>
<div class="editor-field"> @Html.TextBoxFor(u=> u.Email)</div>
<br/>
<div class="editor-label">@Html.LabelFor(u=> u.Password)</div>
<div class="editor-field"> @Html.PasswordFor(u=> u.Password)</div>
<br/>
<div class="editor-label">@Html.LabelFor(u=> u.AccessRight)</div>
<div class="editor-field"> @Html.DropDownListFor(u=> u.PossibleRights, new SelectList(Model.PossibleRights))</div>//error at this line(NullReference exception)
<br/>
<input type="submit" value="Register"/>
une idée de ce que je fais mal? Aussi, est-ce que mon approche pour montrer les articles dans la liste déroulante est bonne? Pouvez-vous suggérer une meilleure idée, le cas échéant?
Pouvez-vous montrer la méthode d'action qui crée le modèle et le transmet en vue? – Andrei
parlez-vous de l'action 'Register' avec l'attribut [HttpPost]' où je passe 'droits' à la vue? Sinon, je ne vous comprends pas vraiment. – Cybercop
Je parlais de l'action 'Register' qui est déclenchée quand get request est envoyé. Vous l'avez déjà ajouté dans votre édition. – Andrei