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

mar*_*rko 5 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:     <% } %>
Run Code Online (Sandbox Code Playgroud)

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

  NorthwindDataContext db = new NorthwindDataContext(); 

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


    return View(products);
Run Code Online (Sandbox Code Playgroud)

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

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcAppNorthwind.Models.Product>>" %>
Run Code Online (Sandbox Code Playgroud)

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

RWG*_*rey 6

将"products"的类型从var更改为IEnumerable <MvcAppNorthwind.Models.Product>,并确保您的演员反映相同.

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