2010-03-01 5 views
1

J'utilise actuellement ASP.NET MVC 2.0 RC2, ayant récemment changé de version 1.0.Nouvelle erreur dans une vue fortement typée - Impossible d'énumérer le modèle?

J'ai remarqué que certaines de mes vues ne fonctionnent plus. J'ai vues héritant d'un fortement typé IEnumerable, comme ceci:

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.Models.MyType>>" 

Dans le passé, je viens d'énumérer le modèle à mon avis comme celui-ci:

<% foreach (var item in Model) { %> 

Mais qui ne fonctionne plus. Je reçois une erreur dans le navigateur:

foreach statement cannot operate on variables of type 'object' because 'object' 
does not contain a public definition for 'GetEnumerator'

je peux le réparer en effectuant la nécessaire moulages:

<% foreach (MyType item in (IEnumerable<MyType>)Model) { %> 

Mais c'est assez laid, et il suggère qu'il ya eu un changement de comportement, donc j'ai besoin de savoir pourquoi.

J'ai vérifié, et ViewPage.Model est en effet défini comme object, donc je me demande comment cela aurait pu fonctionner comme avant. Il est également défini comme object dans ASP.NET MVC 1.0.

Ce qui donne?

Remarque: J'ai le code source MVC chargé dans mon projet. Cela ferait-il une différence? Y a-t-il des métadonnées qui sont injectées à l'exécution et qui font ce travail, ce qui est impossible en voyant la définition object dans la source?

Répondre

1

FWIW, ViewPage.Model est de type TModel dans ViewPage<TModel>, la classe générique que vous utilisez. (Dans votre exemple de code, TModel est IEnumerable<MyProject.Models.MyType>). Donc, il ne devrait pas être droit object.

-t-il une différence si vous changez @Page à

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyType>>" 

et ajoutez une ligne

<%@ Import namespace="MyProject.Models" %> 

à la vue?

+0

Ajout de la ligne n'a eu aucun effet. –

+0

'ViewPage.Model' est intellisensing en tant que' object'. Il semblerait donc que la page ne prenne pas correctement l'attribut 'Inherits' dans la directive' Page'. –

+0

En fait, aucune des pages ne fonctionne plus. Ils affichent tous ViewPage.Model comme objet. –