【问题标题】:ASP.NET MVC MODEL - Passing Joins created on Models to Controllers and Views with scaffoldASP.NET MVC 模型 - 将模型上创建的连接传递给具有脚手架的控制器和视图
【发布时间】:2010-09-29 13:47:03
【问题描述】:

就是这样: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);
    }

视图:我从模型 Products 创建了一个强类型视图。

当我创建视图时,我只收到了来自 Table Product 的字段,但没有收到来自 table Details 和 Picture 的字段。

我的主要问题在于必须创建一个视图才能使用模型上定义的所有字段(在本例中 = productrepository.productslist(); 目前,当我直接脚手架时,我只收到字段来自使用产品强类型的产品。

非常感谢!

【问题讨论】:

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


    【解决方案1】:

    您将视图强类型化为 Product 类型,但您的 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 查询是否返回了预期的结果。

    【讨论】:

    • 史蒂夫,我遇到了问题。我尝试创建一个 ProductViewModel 类以显示我想要的字段,但我无法创建结果。首先我在定义公共字符串时遇到问题,它在许多字段中不被接受。此外,我使用 return View("Index", class-name); 放置返回信息。任何帮助表示赞赏...
    • 继续:但使用索引,类名不起作用。此外,我无法定义产品列表的返回...如果您阅读了这篇文章,请提前非常感谢。
    • @sebastian - 我没有关注 - 你说“它在许多领域不被接受”是什么意思?当您说您不能“定义产品列表的返回”时,我也不确定您的意思。能够看到代码和特定的错误消息会有所帮助。
    • 史蒂夫,抱歉耽搁了。我将整个代码粘贴到copypastecode.com/45542
    • 我不知道如何使用您建议我使用的 ProductViewModel。可能性 1:将其放在存储库的 select{Productviewmodel} 中。可能性2:把它放在控制器的return(productviewmodel)中?。老实说,我不知道如何传递两个表的信息,使用存储库类并只调用我需要显示的字段...... Brgds!谢谢。
    【解决方案2】:

    您可能希望从 ProductsList() 返回一个命名类型,而不是一个匿名类型。然后,您可以在视图中使用该类型名称。

    【讨论】:

    • 嗨,谢谢,我很困惑,因为我在模型中加入了连接,我传递给控制器​​,最后当我尝试在我的视图中使用这些字段时,我只能选择 - 使用强类型选项 - 只是唯一的表,但不是我使用其中三个字段创建的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多