La valeur ne peut pas être null. Nom du paramètre: articles (DrodownList)
Je travaille avec ASP.NET MVC4 et maintenant je veux ajouter un dropdownlist avec les données de ma base de données mysql. C'est ce que je fais :
Dans mon vue (Registre.cshtml):`
<div class="control-group">
@Html.LabelFor(m => m.DistrictID, new { @class= "control-label"})
<div class="controls">
@Html.DropDownListFor(model => model.DistrictID, new SelectList(ViewBag.Districts, "district_id", "district_name", Model.DistrictID))
</div>
</div>
Dans mon Contrôleur (AccountController):
[AllowAnonymous]
public ActionResult Register()
{
var districts = repository.GetDistricts();
ViewBag.Districts = districts;
return View(new RegisterModel());
}
//
//POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
//Attempt to register the User
try
{
MembershipService.CreateUser(model.Name, model.FamilyName, model.BirthDate, model.Sex, model.Nationality, model.Email, model.UserName, model.Password, model.Street, model.StreetNr);
FormsAuthentication.SetAuthCookie(model.UserName, false);
return RedirectToAction("Index", "Home");
}
catch (ArgumentException ae)
{
ModelState.AddModelError("", ae.Message);
}
}
//If we got this far, something failed, redisplay form
return View(model);
}
- Je obtenir les Districts de mon Référentiel comme ceci:
public IQueryable<district> GetDistricts()
{
return from district in entities.districts
orderby district.district_name
select district;
}
Mon RegisterModel:
public class RegisterModel
{
[Required]
[Display(Name = "Given name")]
public string Name { get; set; }
[Required]
[Display(Name = "Family name")]
public string FamilyName { get; set; }
[Required]
[Display(Name = "Birthdate")]
public DateTime BirthDate { get; set; }
[Required]
[Display(Name = "Sex")]
public string Sex { get; set; }
[Required]
[Display(Name = "Nationality")]
public string Nationality { get; set; }
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
[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; }
[Required]
[Display(Name = "Street")]
public string Street { get; set; }
[Required]
[Display(Name = "Street Number")]
public int StreetNr { get; set; }
[Required]
[Display(Name = "District")]
public IEnumerable<SelectListItem> Districts { get; set; }
public int DistrictID { get; set; }
}
La dropdownlist est rempli avec les districts, mais quand je clique sur "s'Enregistrer", j'obtiens cette erreur:
Valeur ne peut pas être null.
Nom du paramètre: élémentsDescription: Une exception non gérée s'est produite lors de l'exécution de
la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'
informations sur l'erreur et où elle a son origine dans le code.Détails De L'Exception: System.ArgumentNullException: la Valeur ne peut pas être null.
Nom du paramètre: éléments
Quand je debug de la méthode, je vois que la ModelState n'est PAS valide.
Clé 11 est DistrictID et comprend la districtid mais la Clé de 12 Districts et donne l'erreur: "The district field is required"
...
Ce que je fais mal?
Double Possible de Ce qui est une exception NullReferenceException, et comment puis-je résoudre ce problème?
OriginalL'auteur nielsv | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Considérer le cas où le modèle de la validation échoue. La vue sera réaffiché à nouveau avec le modèle envoyé avec la demande. Cependant cette ligne:
aura
null
comme premier paramètre, depuisViewBag.Districts
n'a pas été remplis à nouveau, provoquant l'exception. Afin d'éviter d'exception, définissez cette propriété à nouveau:Mise à jour. Voir la définition de modèle, chose qui vient immédiatement à l'esprit est
Required
attribut de laDistricts
collection. Très probablement, vous n'avez pas besoin de l'utilisateur d'entrer une de ces activités, ni de les enregistrer dans la base de données. Essayez de supprimer cet attribut, et l'erreur à propos de cette propriété disparaît.avez-vous essayé de débogage? Au moins ce que vous pouvez faire est d'utiliser des clés au lieu de chaîne vide pour
AddModelError
et l'afficher quelque part dans la page Html.ValidationMessage - cela permettra de montrer si l'exception se produit. Mais encore, le meilleur moyen de comprendre ce qui va mal, c'est juste pour déboguer la méthode.J'ai vérifié la méthode et la modelstate n'est pas valide. Clé 11 (DistrictID) a la valeur de mon districtid mais la Clé de 12 (Districts) donne une erreur: "Le district de champ est obligatoire".
message d'erreur est assez explicite. Vous avez choisi quoi que ce soit dans le district de liste déroulante avant de cliquer sur "s'inscrire"?
Oui, je l'ai fait ... . Et standard est la première ...
OriginalL'auteur Andrei