情况就是这样:ASP.NET MVC C#
模型:我想使用三个表定义的信息,产品 - 详细信息 - 图片。我创建了一个ProductRepository并定义了三个表的连接。最后,我从每个表中选择字段。
public IQueryable ProductsList()
{
var db = new Entities();
var results = from p in db.Products
join pi in db.ProductPic on p.ProductId equals pi.ProductId
// first join
join pv in db.ProductDetails on p.ProductId equals pv.ProductId
// second join
select new
{
p.Name,
p.Description,
p.PCategory,
p.ProductPicture,
pv.Price,
pi.Picture,
};
return (results);
}
控制器:我定义了:
public ActionResult Index()
{
var products = productrepository.ProductsList();
if (products == null) throw new NotImplementedException();
else
return View("Index", products);
}
观点:我从模型产品中创建了一个强类型视图。
当我创建视图时,我只收到表格产品中的字段,但没有收到表格详细信息和图片中的字段。
我的主要问题在于必须创建一个View才能使用模型上定义的所有字段(在本例中= productrepository.productslist();此时我直接搭建我只接收字段来自产品使用强烈类型的产品。
非常感谢你!
答案 0 :(得分:2)
您将视图强烈键入产品类型,但您的EF查询返回包含其他字段的匿名类型。为产品视图模型创建一个类:
class ProductViewModel
{
public string Name { get; set; }
public string Description{ get; set; }
public string PCategory{ get; set; }
public string ProductPicture{ get; set; }
public string Price { get; set; }
public string Picture { get; set; }
}
然后在选择您的EF查询时,填充此类型而不是您的匿名类型。此外,您应该独立验证您的EF查询是否返回预期结果。
答案 1 :(得分:1)
您可能希望从ProductsList()而不是匿名类型返回命名类型。然后,您可以在视图中使用该类型名称。