2010-07-31 3 views
5

Должен ли я вручную создать определение для GetEnumerator? Кажется, что он должен знать ...публичное определение GetEnumerator в asp.net mvc отсутствует?

я получаю следующее сообщение об ошибке:

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:  <% } %> 

В мой контроллер у меня есть этот код:

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>>" %> 

Но если вы хотите отображать или использовать данные из нескольких моделей в одном представлении? Как вы это делаете?

ответ

6

Измените тип «продуктов» от var до IEnumerable <MvcAppNorthwind.Models.Product> и убедитесь, что ваш листинг отражает то же самое.

В ответ на ваш последний вопрос вы можете назначить объекты элементу словаря в ViewData или еще лучше, но вы можете создать View Model, которая содержит все данные, необходимые для представления. Таким образом, у вас есть лучшее разделение проблем с помощью модели, характерной для вашего взгляда.

Смежные вопросы