【发布时间】:2015-04-15 14:20:22
【问题描述】:
我有两个自动生成的数据库模型(Product 和 ProductDetails),我将它们合并到一个 ViewModel 中,这样我就可以一次编辑所有数据。
让我感到困惑的是我应该在视图中迭代 Product_ProductCategoryAttributes(在 ProductDetail 模型中)的 ICollection 以允许 .NET 自动将属性绑定到 ViewModel 的部分。我曾尝试使用 for 以及 foreach 循环,但没有任何成功,因为正在使用错误的名称创建控件(需要自动绑定)。
产品型号
public partial class Product
{
public Product()
{
this.ProductDetail = new HashSet<ProductDetail>();
}
public int idProduct { get; set; }
public int idProductCategory { get; set; }
public string EAN { get; set; }
public string UID { get; set; }
public bool Active { get; set; }
public virtual ProductCategory ProductCategory { get; set; }
public virtual ICollection<ProductDetail> ProductDetail { get; set; }
}
ProductDetail模型
public partial class ProductDetail
{
public ProductDetail()
{
this.Product_ProductCategoryAttribute = new HashSet<Product_ProductCategoryAttribute>();
}
public int idProductDetail { get; set; }
public int idProductCategory { get; set; }
public int idMeta { get; set; }
public int idProduct { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Meta Meta { get; set; }
public virtual Product Product { get; set; }
public virtual ICollection<Product_ProductCategoryAttribute> Product_ProductCategoryAttribute { get; set; }
public virtual ProductCategory ProductCategory { get; set; }
}
ProductViewModel - 一个产品可以有多个 ProductDetails
public class ProductViewModel
{
public Product Product { get; set; }
public List<ProductDetail> ProductDetails { get; set; }
}
查看(部分代码故意省略)
@for (int i = 0; i < Model.ProductDetails.Count(); i++)
{
@Html.TextAreaFor(model => model.ProductDetails[i].Description, new { @class = "form-control", @rows = "3" })
@for (int j = 0; j < Model.ProductDetails[i].Product_ProductCategoryAttribute.Count(); j++)
{
@Html.HiddenFor(model => model.ProductDetails[i].Product_ProductCategoryAttribute.ElementAt(j).idProductCategoryAttribute)
@Html.TextBoxFor(model => model.ProductDetails[i].Product_ProductCategoryAttribute.ElementAt(j).Value, new { @class = "form-control" })
}
}
第二个 for 循环 之外的所有控件都被正确命名,例如。 ProductDetails[0].Description,但是在第二个 for 循环 中生成的控件通过属性值来命名,在本例中为 Value 和idProductCategoryAttribute。如果我没记错的话,一种解决方案是将 ICollection 转换为 IList,但自动生成模型我认为这不是最佳选择。
【问题讨论】:
标签: c# asp.net-mvc entity-framework viewmodel asp.net-mvc-viewmodel