Значение из DropDownListFor не сохраняет значение в базе данных - PullRequest
0 голосов
/ 09 марта 2019

Вот мой взгляд

<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 Ответ

1 голос
/ 11 марта 2019

Свойство 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 (вложенные модели представления)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...