如何将多列返回到View?

时间:2010-11-09 05:02:46

标签: asp.net-mvc linq

我想返回我的视图产品信息(名称和成本),并且在我的View代码的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);
  }
}

控制器代码:

public ActionResult Index(int id)
    {
      Product product = productRepository.GetProductInfo(id);

  return View("Index", product);
}

查看代码:

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

2 个答案:

答案 0 :(得分:0)

您循环遍历产品的单个实例。您将传递从GetProductInfo返回的内容,该内容不是产品集合。

答案 1 :(得分:0)

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

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

Inherits部分应该告诉您您期望的类型。在上面的示例中,它需要一个Product类型。这需要匹配您传递给控制器​​中View()方法的对象的类型。

您的视图可能具有类似“

”的继承类型
...Inherits="System.Web.Mvc.ViewPage<List<myApp.Model.Product>>"...

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