我有一个包含
在我的MVC项目中,我有一个操作方法,用于显示一个带有选择的
我遇到的困难是如何最好地显示这个平整的选定
可以将它想象成eBay,您可以选择多个变化,例如按颜色。对于我来说,多个变化就是
我想知道最好的方法是什么?目前,我的方法是将一个
您对如何配置映射有什么建议吗?
我省略了我已经完成的映射,因为它基本上是直接的一对一映射,除了将选择的
Product
列表的Item
,使用AutoMapper将其映射到相应的ViewModel
对象中。在我的MVC项目中,我有一个操作方法,用于显示一个带有选择的
Product
的Item
。为此,我有一个名为ItemDetailsViewModel
的ViewModel
,其中包含平整的Item
对象、ProductViewModel
列表和平整的选择的Product
。我遇到的困难是如何最好地显示这个平整的选定
Product
。可以将它想象成eBay,您可以选择多个变化,例如按颜色。对于我来说,多个变化就是
Products
。当用户选择Product
时,我希望返回ItemDetails
,即Item
、Products
列表和选定的Product
。我想知道最好的方法是什么?目前,我的方法是将一个
Item
映射到一个ItemDetailsViewModel
,选择所需的ProductViewModel
,然后具体地将ProductViewModel
的每个属性映射回ItemDetailsViewModel
上。此外,由于Item
和Product
具有相同命名的属性,最后一行映射产品会覆盖Item
的ID和代码。您对如何配置映射有什么建议吗?
我省略了我已经完成的映射,因为它基本上是直接的一对一映射,除了将选择的
ProductViewModel
映射回ItemDetailsViewModel
。Mapper.CreateMap<Item, ItemViewModel>()
.ReverseMap();
Mapper.CreateMap<ProductViewModel, ItemDetailsViewModel>()
.ForMember(d => d.ProductId, o => o.MapFrom(s => s.Id))
.ForMember(d => d.ProductCode, o => o.MapFrom(s => s.Code));
类
public class Item
{
public int Id { get; set; }
public string Code { get; set; }
public IList<Product> Products { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Code { get; set; }
}
public class ItemViewModel
{
public int Id { get; set; }
public string Code { get; set; }
public IList<ProductViewModel> Products { get; set; }
}
public class ItemDetailsViewModel : ItemViewModel
{
public int ProductId;
public string ProductCode;
}
public class ProductViewModel
{
public int Id { get; set; }
public string Code { get; set; }
}
行动
public ActionResult ItemDetails()
{
var item = new Item
{
Id = 1,
Code = "Item1",
Products = new List<Product>()
{
new Product { Id = 1, Code = "Product1" },
new Product { Id = 2, Code = "Product2" },
new Product { Id = 3, Code = "Product3" },
}
};
var productCode = "Product2";
var itemDetailsViewModel = Mapper.Map<ItemDetailsViewModel>(item);
if (itemDetailsViewModel.Products != null && itemDetailsViewModel.Products.Count > 0)
{
ProductViewModel productViewModel = null;
if (!String.IsNullOrEmpty(productCode))
productViewModel = itemViewModel.Products.FirstOrDefault(e => e.Code.Equals(productCode, StringComparison.OrdinalIgnoreCase));
if (productViewModel == null)
productViewModel = itemViewModel.Products[0];
Mapper.Map<ProductViewModel, ItemDetailsViewModel>(productViewModel, itemDetailsViewModel);
}
}