ASP.NET MVC单视图多模型问题:无法调用CakesVM.Add()方法
解决ASP.NET MVC中无法向IEnumerable集合添加元素的问题
问题核心在于IEnumerable
步骤1:修改ProductsViewModel的集合类型
把原来的IEnumerable<CakesViewModel>改成List<CakesViewModel>(或ICollection
public class ProductsViewModel { // 直接初始化List,避免后续Add时出现NullReferenceException public List<CakesViewModel> CakesVM { get; set; } = new List<CakesViewModel>(); // 其他子集合(比如BreadsVM、DrinksVM)也同理修改 // public List<BreadsViewModel> BreadsVM { get; set; } = new List<BreadsViewModel>(); }
或者通过构造函数初始化:
public class ProductsViewModel { public ProductsViewModel() { CakesVM = new List<CakesViewModel>(); } public List<CakesViewModel> CakesVM { get; set; } }
步骤2:控制器中正常执行添加操作
现在可以直接调用CakesVM.Add()方法添加转换后的ViewModel对象:
public ActionResult Index() { // 从数据库查询产品数据 var dbCakes = db.Products.Where(p => p.Category == "Cake").ToList(); var productsVM = new ProductsViewModel(); // 逐个转换并添加到集合 foreach (var cake in dbCakes) { productsVM.CakesVM.Add(new CakesViewModel { Id = cake.Id, Name = cake.ProductName, Price = cake.UnitPrice, Description = cake.Description // 映射其他需要的属性 }); } // 如果用AutoMapper工具,可以批量转换更高效: // productsVM.CakesVM = _mapper.Map<List<CakesViewModel>>(dbCakes); return View(productsVM); }
额外说明
如果因为某些需求必须保留IEnumerable
// 不推荐,仅作应急参考 productsVM.CakesVM = productsVM.CakesVM.ToList(); ((List<CakesViewModel>)productsVM.CakesVM).Add(newCakeVM);
内容的提问来源于stack exchange,提问作者Dev Beginner
相关产品推荐
相关产品推荐

