从一个模型获取名称到另一个模型

时间:2019-06-26 09:12:53

标签: c# asp.net-mvc-5

我有两个模型:

一个代表品牌

public class BrandVM
    {
        public BrandVM() { }

        public BrandVM(BrandDTO row)
        {
            Id = row.Id;
            Name = row.Name;
            Description = row.Description;
        }
        public int Id { get; set; }
        [Required]
        [StringLength(50, MinimumLength = 3)]
        public string Name { get; set; }
        [Required]
        public string Description { get; set; }
        public virtual BicycleVM BicycleVM { get; set; }
    }

产品第二名

public class BicycleVM
    {
        public BicycleVM() { }

        public BicycleVM(BicycleDTO row)
        {
            Id = row.Id;
            CategoryId = row.CategoryId;
            BrandId = row.BrandId;
            Mark = row.Mark;
            Year = row.Year;
            Color = row.Color;
            ImageName = row.ImageName;
        }

        public int Id { get; set; }
        [DisplayName("Category")]
        public int CategoryId { get; set; }
        [DisplayName("Brand")]
        public int BrandId { get; set; }
        [Required]
        [StringLength(50, MinimumLength = 3)]
        public string Mark { get; set; }
        public int Year { get; set; }
        [Required]
        [StringLength(50, MinimumLength = 3)]
        public string Color { get; set; }
        DisplayName("Image")]
        public string ImageName { get; set; }

        public string Category { get; set; }
        public string Brand { get; set; }

        public IEnumerable<SelectListItem> Categories { get; set; }
        public IEnumerable<SelectListItem> Brands { get; set; }
        public IEnumerable<string> GalleryImages { get; set; }
    }

公共字符串Brand {get;组; }在表格中不存在,仅用于查看。

我需要以某种方式从一张桌子上获得所有品牌并将其插入到属性品牌中。 Bramds的ID必须与BrandId匹配。

对我来说是什么样子:我从第一个表格中获得了所有品牌的名称和ID。将产品中的BrandId与“品牌ID”进行比较。如果匹配,则为product.Brand = brand.Name。

尝试过:

List<BicycleVM> listOfBicycleVM;
using (Db db = new Db())
{
  var init = db.Bicycles.ToArray()
      .Where(x => catId == null || catId == 0 || x.CategoryId == catId)
      .Select(x => new BicycleVM(x));


  listOfBicycleVM = init.ToList();

  var brand = db.Brands.ToList();

  listOfBicycleVM.ForEach(bicycle => bicycle.Brand = brand
          .FirstOrDefault(p => p.Id == bicycle.BrandId).ToString());

没有运气:(

2 个答案:

答案 0 :(得分:1)

您不应该尝试将两个ViewModels组合在一起形成一个视图,这违背了它们的目的。但是,您可以将两个模型合并为一个ViewModel

创建一个包含所有所需数据的单个ViewModel,并将其命名为“ BicycleBrandVM”。在控制器中或您现在要填充ViewModels的任何位置填充它,然后将其传递到View

答案 1 :(得分:0)

找到了解决方法

var brand = db.Brands.ToArray().Select(x => new BrandVM(x));
                foreach (var item in listOfBicycleVM)
                {
                    if( brand.Any(x => x.Id == item.BrandId))
                    {
                        item.Brand = brand.First(c => c.Id == item.BrandId).Name;
                    }
                }

好像是这样,没有这部分就可以工作

if( brand.Any(x => x.Id == item.BrandId))

稍后再试