Я создал вид модели под названием CompetitionRoundModel
, который частично производится ниже:Проблема с Model Binding
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
}
Я структурирована эта модель так, потому что мне нужно, чтобы заполнить выпадающий список на основе значения, хранящегося в CategoryValues. Так мой взгляд, у меня есть:
@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
}
Я выбрал model.CategoryId
в методе DropDownListFor()
, так как я хочу, чтобы связать выбранное значение CategoryId
. Мне действительно все равно CategoryValues
, мне просто нужно заполнить DropDown.
Моя проблема сейчас в том, что, когда мой контроллер принимает значения для моей модели в методе действия, CategoryValues
равно нулю, который приводит систему бросить ArgumentNullException
(линия, которая подсвечивается является return Enumerable
линия.
I даже не пробовал [Bind(Exclude="CategoryValues")]
, но никаких изменений вообще. Любая помощь будет очень признательна.
Thanks @StephenMuecke. Ваше решение сработало. Я просто не знаю, как пометить ваш комментарий как «Ответ» здесь, чтобы вы взяли кредит. –