В раскрывающемся списке MVC Asp.Net не отправляется значение в контроллер -> база данных - PullRequest
0 голосов
/ 06 июля 2018

моей средой разработки является 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.

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 06 июля 2018

В NewItemViewModel вы не создали свойство для хранения выбранных значений из выпадающего списка

public class NewItemViewModel
{
    public IEnumerable<Category> Categories { get; set; }
    public int SelectedCategory{get;set;}
    public Item Item { get; set; }
    public int SelectedDonor{get;set;}
    public IEnumerable<Donor> Donors { get; set; }
}


@using (Html.BeginForm("Create", "Item"))
{
<div class="form-group">
    @Html.LabelFor(m => m.Item.Donor)
    @Html.DropDownListFor(m => m.SelectedDonor, 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.SelectedCategory, new SelectList(Model.Categories, "Id", "Name"), "Select Item Category", new { @class = "form-control" })
</div>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...