Asp.Net MVC下拉列表未将值发布到控制器->数据库

时间:2018-07-06 09:41:01

标签: asp.net-mvc entity-framework

我的开发环境是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>
}

要重申我遇到的问题:“类别”和“捐助者”下拉列表的值未保存到数据库,而其他(非导航属性?)名称,描述,数量等则正常工作。 / p>

我正确使用ViewModel吗?我给人的印象是MVC框架知道如何处理在Create()操作中传递Item对象参数-将其所需的内容映射到Item实体中。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

在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>
}