Asp.net mvc 如何向视图返回多个列?

Asp.net mvc 如何向视图返回多个列?,asp.net-mvc,linq,Asp.net Mvc,Linq,我想返回查看产品信息名称和成本,但在查看代码的foreach语句中遇到以下错误: 无法将类型“ProductApp.Models.Product”隐式转换为“System.Collections.IEnumerable”。存在显式转换。是否缺少强制转换 我似乎错过了一些愚蠢而简单的事情。有人能帮我纠正这个吗 存储库代码: public class ProductRepository { DatabaseEntities db = new DatabaseEntities(); publ

我想返回查看产品信息名称和成本,但在查看代码的foreach语句中遇到以下错误: 无法将类型“ProductApp.Models.Product”隐式转换为“System.Collections.IEnumerable”。存在显式转换。是否缺少强制转换

我似乎错过了一些愚蠢而简单的事情。有人能帮我纠正这个吗

存储库代码:

public class ProductRepository
{
  DatabaseEntities db = new DatabaseEntities();

  public IQueryable<Product> FindAllProducts()
  {
     return db.Products;
  }

  public Product GetProductInfo(int id)
  {
     return db.Product.FirstOrDefault(p => p.Product_ID == id);
  }
}
查看代码:

<ul>
  <% foreach (var product in Model)
    { %>
      <li>
        <%: product.Product_Name%>
        which costs 
        <%: product.Product_Cost%>
        is available.
      </li>
    <% } %>
</ul>

您正在循环一个产品的单个实例。您正在将从GetProductInfo返回的内容传递给视图,它不是产品的集合。

在您的视图中,查看模型类型。视图中的第一行将告诉您视图所需的类型:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<myApp.Model.Product>" %>

因此,您应该确保从控制器返回项目列表。

因此,在存储库代码中,我应该有如下内容:public Product GetProductInfo{return db.Product;}如果要更改控制器代码,您应该返回:productRepository.FindAllProducts;而不是单一的产品。这将符合您的视图的期望。在使用我的控制器代码进行一些重新工具化并确保正确设置了继承之后,它似乎可以正常工作。
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<myApp.Model.Product>" %>
...Inherits="System.Web.Mvc.ViewPage<List<myApp.Model.Product>>"...