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