传递模型中另一个表的行列表

时间:2016-11-07 10:36:16

标签: c# asp.net-mvc

我有一个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列,IdName

要明确的是,我现在所做的工作,我只想通过模型完成,而不是使用ViewBag

1 个答案:

答案 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
})