2010-07-31 2 views
1

Je suis en train de convertir une page ASPX existante au format cshtml.Moteur de vue rasoir - exception lors de l'appel de toute fonction

La ASPX originale ressemble à quelque chose comme ceci:

<% 
    if (!Model.ObjectList.Any()) 
    { 

     %> 
     <tr> 
      <td>No data found</td> 
     </tr> 
     <% 
    } 

La version équivalente de Razor ressemble à ceci:

@if (!Model.ObjectList.Any()) 
{ 
<tr> 
    <td>No data found</td> 
</tr> 
} 

Alors que la syntaxe originale fonctionne très bien, l'équivalent échoue avec le message suivant

'System.Collections.Generic.List' ne contient pas annonce EFINITION pour 'Tout'

Je me demandais
a) pourquoi cela se passe et
b) comment résoudre ce problème. J'ai ajouté une référence à l'espace de noms System.LINQ dans mon fichier CSHTML mais en vain.

Toute aide est très appréciée,

JP

+0

Avez-vous inclus une référence d'assemblage pour System.Core? – fletcher

+0

Bien sûr, il l'a fait, car 'System.Web.Mvc' dépend de' System.Core' et le site ne fonctionnerait même pas. –

+0

@JP, j'ai testé votre scénario et n'ai pas pu reproduire l'erreur. –

Répondre

3

Merci à tous pour leurs réponses. Cela s'est avéré être un ID 10 T ....

Essentiellement j'ai négligé de taper fortement mon point de vue. J'utilisais

@inherits System.Web.Mvc.WebViewPage<dynamic> 

au lieu d'utiliser

@inherits System.Web.Mvc.WebViewPage<MyViewModel> 

En utilisant le bon type résolu le problème. Merci encore, JP

0

Vous devez importer l'espace de noms correct:

using System.Linq; 
+0

Comme je l'ai mentionné au point b, j'ai déjà ajouté cette référence ... –

0

Vous pouvez le faire aussi:

@if (Model.ObjectList.Count == 0) 
{ 
<tr> 
    <td>No data found</td> 
</tr> 
} 
Questions connexes