ASP.NET MVC模型 - 使用scaffold将模型上创建的连接传递给控制器​​和视图

时间:2010-09-29 05:35:58

标签: c# asp.net-mvc entity-framework

情况就是这样: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();此时我直接搭建我只接收字段来自产品使用强烈类型的产品。

非常感谢你!

2 个答案:

答案 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()而不是匿名类型返回命名类型。然后,您可以在视图中使用该类型名称。