Свойство SubCatagory
содержит нулевое значение, поскольку это свойство сложного объекта, привязанное к классу SubCatagory
, которое DropDownListFor
возвращает одно выбранное значение вместо свойств целого класса.Вам необходимо выполнить одно из следующих действий:
Опция A: Создать свойство выбранного значения
Создать свойство int
, которое будет содержать выбранное значение от DropDownListFor
до Product
class, а затем вы можете назначить свойство SubCatagory
внутри контроллера, выполняя запросы из базы данных на основе переданного значения во вновь созданном свойстве.
Модель
public class Product
{
[Key]
public int Id { get; set; }
[Display(Name = "Sub Catagory")]
public int SelectedSubCatagory { get; set; }
// other properties
}
Просмотр
<div class="form-group">
@Html.LabelFor(model => model.SelectedSubCatagory, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedSubCatagory, new SelectList(ViewBag.SubCategories, "Id", "Name", "Category"))
@Html.ValidationMessageFor(model => model.SelectedSubCatagory, "", new { @class = "text-danger" })
</div>
</div>
Вариант B: Использовать существующее дочернее свойство SubCatagory
class
Предположим, у вас есть свойство ID, объявленное внутри SubCatagory
classкак это:
public class SubCatagory
{
public int Id { get; set; }
public string Name { get; set; }
// other properties
}
Вы можете использовать его для привязки к DropDownListFor
помощнику, как в примере ниже:
View
<div class="form-group">
@Html.LabelFor(model => model.SubCatagory.Id, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SubCatagory.Id, new SelectList(ViewBag.SubCategories, "Id", "Name", "Category"))
@Html.ValidationMessageFor(model => model.SubCatagory.Id, "", new { @class = "text-danger" })
</div>
</div>
Обратите внимание, что если вы выберете эту опцию, убедитесь, что свойство SubCatagory
уже создано (с ключевым словом new
) в классе Product
, чтобы избежать использования NullReferenceException
при использовании его дочерних свойств.
Ссылка:
Как просто Html.DropDownListFor для MVC.NET (вложенные модели представления)