J'ai créé un Voir modèle appelé CompetitionRoundModel
qui est partiellement produit ci-dessous:Problème avec le modèle de liaison
public class CompetitionRoundModel
{
public IEnumerable<SelectListItem> CategoryValues
{
get
{
return Enumerable
.Range(0, Categories.Count())
.Select(x => new SelectListItem
{
Value = Categories.ElementAt(x).Id.ToString(),
Text = Categories.ElementAt(x).Name
});
}
}
[Display(Name = "Category")]
public int CategoryId { get; set; }
public IEnumerable<Category> Categories { get; set; }
// Other parameters
}
J'ai structuré le modèle de cette façon parce que je dois remplir un menu déroulant en fonction de la valeur stockée dans CategoryValues. Donc, pour moi je:
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(model => model.CategoryId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CategoryId, Model.CategoryValues, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CategoryId, "", new { @class = "text-danger" })
</div>
</div>
// Other code goes here
}
J'ai choisi model.CategoryId
dans la méthode DropDownListFor()
puisque je veux lier la valeur sélectionnée à CategoryId
. Je ne me soucie vraiment pas de CategoryValues
, j'en ai juste besoin pour peupler le DropDown.
Mon problème est maintenant que quand mon contrôleur reçoit les valeurs pour mon modèle dans la méthode d'action, CategoryValues
est nul qui fait le système pour lancer une ArgumentNullException
(la ligne qui est en surbrillance est la ligne return Enumerable
.
I ont même essayé [Bind(Exclude="CategoryValues")]
mais aucun changement. toute aide serait appréciée.
Merci @StephenMuecke. Votre solution a fonctionné. Je ne sais pas comment marquer votre commentaire comme une «réponse» ici pour que vous puissiez prendre le crédit. –