我有一个Products
表和一个ProductVM
视图模型,在ProductVM
中我想要一个来自另一个表(Categories
)的行列表,所以我可以在添加新产品时在下拉列表中显示该内容。
我无法做到这一点,所以我使用ViewBag
传递给视图并制作下拉列表,但我知道我应该通过模型来做,但不知道如何。
ProductVM
public class ProductVM
{
public ProductVM()
{
}
public ProductVM(ProductDTO productDTO)
{
Id = productDTO.Id;
Name = productDTO.Name;
Description = productDTO.Description;
CategoryId = productDTO.Id;
}
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int? CategoryId { get; set; }
}
ActionMethod:
public ActionResult AddProduct()
{
Db db = new Db();
var result = from r in db.Categories
select new { r.Name, r.Id };
ViewBag.Categories = new SelectList(db.Categories, "Id", "Name");
return View();
}
Categories
表只有2列,Id
和Name
。
要明确的是,我现在所做的工作,我只想通过模型完成,而不是使用ViewBag
。
答案 0 :(得分:0)
向视图模型添加属性
public IEnumerable<SelectListItem> Categories { get; set; }
并在控制器中使用
var model = new ProductVM()
{
Categories = new SelectList(db.Categories, "Id", "Name"
};
return View(model);
注意您也可以使用
Categories = db.Categories.Select(x => new SelectListItem()
{
Value = x.Id.ToString(), // assumes Id is not typeof string
Text = x.Name
})