2010-07-31 18 views
5

¿Debo crear manualmente una definición para GetEnumerator? Parece que debería saber ...definición pública de GetEnumerator en asp.net falta mvc?

me sale el siguiente error:

foreach statement cannot operate on variables of type 'MvcAppNorthwind.Models.Product' because 'MvcAppNorthwind.Models.Product' does not contain a public definition for '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:  <% } %> 

En mi controlador Tengo este código:

NorthwindDataContext db = new NorthwindDataContext(); 

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


    return View(products); 

he cambiado la declaración en mi opinión como este y ahora funciona:

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

¿Pero si desea mostrar o usar datos de varios modelos en la misma vista? ¿Cómo lo haces entonces?

Respuesta

6

Cambia el tipo de "productos" de var a IEnumerable <MvcAppNorthwind.Models.Product> y asegúrate de que tu modelo refleje lo mismo.

En respuesta a su última pregunta, podría asignar objetos a un elemento de diccionario en ViewData O mejor aún, podría crear un Modelo de vista que contenga todos los datos que necesita para la vista. De esta forma, tendrá una mejor separación de preocupaciones al tener un modelo específico para su vista.