Публичное определение GetEnumerator в asp.net MVC отсутствует? - PullRequest
5 голосов
/ 31 июля 2010

Должен ли я вручную создать определение для 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 Ответ

6 голосов
/ 31 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...