Значение из выпадающего списка for не сохраняет значение в базе данных

#asp.net-mvc

#asp.net-mvc

Вопрос:

Вот мое мнение

 <div class="form-group">
    @Html.LabelFor(model => model.SubCatagory, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.SubCatagory, new SelectList(ViewBag.SubCategories, "Id", "Name", "Category"))
        @Html.ValidationMessageFor(model => model.SubCatagory, "", new { @class = "text-danger" })
    </div>
</div>
  

И вот метод, в котором я сохраняю данные.

  dbContext.Products.Add(product);
 dbContext.SaveChanges();
  

Оно сохраняет все значения в базу данных, кроме SubCatagoryId..
Кто-нибудь, пожалуйста, может мне помочь?

Комментарии:

1. product Есть ли свойство SubCategoryId и заполняется ли оно должным образом при запуске отладчика? Вы получаете сообщение об ошибке? Если да, то в чем ошибка? Пожалуйста, покажите нам более полный пример кода с вашим действием и моделью.

2. @Sajid8212, покажите, пожалуйста, свой Product класс модели?

3. открытый класс Product { [Ключ] открытый идентификатор int { получить; установить; } [Обязательно] [Отображать (Имя = «Название продукта»)] общедоступное строковое имя { получить; установить; } [Отображать (Имя = «Цена продажи»)] общедоступная двойная цена продажи { получить; установить; } [Отображать (Имя = «Подкаталог»)] общедоступная подкаталогия SubCatagory { получить; установить; } общедоступное двойное количество { получить; установить; } общедоступный тип количества QuantityType { получить; установить; } }

4. Вот мой класс продукта…

Ответ №1:

SubCatagory Свойство содержит нулевое значение, потому что это свойство сложного объекта, привязанное к SubCatagory классу, которое DropDownListFor возвращает одно выбранное значение вместо всех свойств класса. Вы должны выполнить одно из следующих действий:

Вариант A: Создать свойство выбранного значения

Создайте int свойство, которое будет содержать выбранное значение из DropDownListFor в Product классе, а затем вы можете назначить 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 класса

Предположим, у вас есть свойство ID, объявленное внутри SubCatagory класса следующим образом:

 public class SubCatagory
{
    public int Id { get; set; }

    public string Name { get; set; }

    // other properties
}
  

Вы можете использовать его для привязки к DropDownListFor помощнику, как в примере ниже:

Вид

 <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.Выпадающий список для MVC.NET (Вложенные модели просмотра)