2010-07-31 4 views
5

Soll ich manuell eine Definition für GetEnumerator erstellen? Scheine, wie es wissen sollte ...öffentliche Definition von GetEnumerator in asp.net mvc fehlt?

bekomme ich folgende Fehlermeldung:

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

In meinem Controller habe ich diesen Code:

NorthwindDataContext db = new NorthwindDataContext(); 

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


    return View(products); 

ich die Erklärung meiner Ansicht geändert so und jetzt funktioniert es:

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

Aber wenn Sie Daten von mehreren Modellen in derselben Ansicht anzeigen oder verwenden möchten? Wie machst du es dann?

Antwort

6

Ändern Sie den Typ der "Produkte" von Var zu IEnumerable <MvcAppNorthwind.Models.Product> und stellen Sie sicher, dass Ihre Besetzung das gleiche widerspiegelt.

Als Antwort auf Ihre letzte Frage könnten Sie einem Dictionary-Objekt in ViewData Objekte zuweisen ODER besser, aber Sie könnten ein View-Modell erstellen, das alle Daten enthält, die Sie für die Ansicht benötigen. Auf diese Weise haben Sie eine bessere Trennung von Bedenken, indem Sie ein Modell haben, das für Ihre Sicht spezifisch ist.