asp.net mvc中GetEnumerator的公共定义丢失了吗?

时间:2010-07-31 13:34:54

标签: asp.net-mvc-2

我应该手动为GetEnumerator创建定义吗?好像它应该知道...

我收到以下错误:

  

foreach声明无法操作   类型的变量   'MvcAppNorthwind.Models.Product'   因为   'MvcAppNorthwind.Models.Product'确实如此   不包含公共定义   '的GetEnumerator'

Line 9:      <h2><%: ViewData["Message"] %></h2>
Line 10:     <ul>
Line 11:     <% foreach (MvcAppNorthwind.Models.Product p in ViewData.Model)  {   %>
Line 12:     <li><%= p.ProductName %></li>
Line 13:     <% } %>

在我的控制器中,我有这段代码:

  NorthwindDataContext db = new NorthwindDataContext(); 

    ViewData["Message"] = "Welcome to ASP.NET MVC!";
    var products = from p in db.Products
                   select p; 


    return View(products);

我在我的视图中更改了这样的声明,现在它可以正常工作:

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

但是,如果要在同一视图中显示或使用多个模型的数据?你是怎么做到的?

1 个答案:

答案 0 :(得分:6)

将“产品”的类型从var更改为IEnumerable <MvcAppNorthwind.Models.Product&gt;并确保你的演员表现出同样的效果。

在回答上一个问题时,您可以将对象分配给ViewData中的字典项目,或者更好地创建一个包含视图所需的所有数据的视图模型。通过这种方式,您可以通过拥有特定于您视图的模型来更好地分离关注点。