моей средой разработки является ASP.NET MVC 5, использующий Entity Framework 6, использующий рабочий процесс с первым кодом.
Моя проблема: при попытке добавить новую запись в базу данных значения из моих двух выпадающих списков не включаются. Все остальные поля действительно сохраняются в базе данных.
Я передаю ViewModel рассматриваемому виду:
public class NewItemViewModel
{
public IEnumerable<Category> Categories { get; set; }
public Item Item { get; set; }
public IEnumerable<Donor> Donors { get; set; }
}
Модели доменов, которые я использую:
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int Quantity { get; set; }
public bool IsActive { get; set; }
public Category Category { get; set; }
public Donor Donor { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Donor
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
public string Email { get; set; }
}
Соответствующий контроллер: это действие New () просто используется для передачи данных в представление для отправки формы
public ActionResult New()
{
var itemCategories = _context.ItemCategory.ToList();
var donors = _context.Donors.ToList();
var viewModel = new NewItemViewModel
{
Categories = itemCategories,
Donors = donors
};
return View(viewModel);
}
Вот мое действительное действие, которое добавляет представленные данные в базу данных:
// Create a new item.
[HttpPost]
public ActionResult Create(Item item)
{
_context.Items.Add(item);
_context.SaveChanges();
return RedirectToAction("Index", "Item");
}
И, наконец, само представление (здесь я уменьшу код):
@using (Html.BeginForm("Create", "Item"))
{
<div class="form-group">
@Html.LabelFor(m => m.Item.Donor)
@Html.DropDownListFor(m => m.Item.Donor, new SelectList(Model.Donors, "Id", "FullName"), "Who donated this item?", new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Item.Category)
@Html.DropDownListFor(m => m.Item.Category, new SelectList(Model.Categories, "Id", "Name"), "Select Item Category", new { @class = "form-control" })
</div>
}
Чтобы повторить возникшую проблему: значения раскрывающегося списка для категории и донора не сохраняются в базе данных, в то время как другие (не навигационные свойства?) Имя, описание, количество и т. Д. Работают правильно.
Правильно ли я использую ViewModel? У меня сложилось впечатление, что инфраструктура MVC знает, как справиться с передачей параметра объекта Item в действии Create () - отображением того, что ему нужно в сущности Item.
Любая помощь будет принята с благодарностью. Спасибо.