我的开发环境是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实体中。
任何帮助将不胜感激。谢谢。
答案 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>
}