2013-07-19 9 views
9

Fondamentalement, je fais un test causé par un d'excpetion.différent entre @Model et @model

En utilisant return View(list_a) dans le contrôleur I a adopté une liste dans mon point de vue, sur ma Voir la page, le code est comme:

@{ 
    ViewBag.Title = "KYC_Home"; 
} 
@using UniBlue.Models; 
@model UniBlue.Models.KYC 
... 
@foreach(KYC a in Model) 
... 

il y aura une exception dit:

CS1579: foreach statement cannot operate on variables of type 'UniBlue.Models.KYC' because 'UniBlue.Models.KYC' does not contain a public definition for 'GetEnumerator' 

Mais , quand j'ai changé mon code pour @Model Page a l'air bien, mais sur le titre, il montre:

System.Collections.Generic.List`1[UniBlue.Models.KYC] UniBlue.Models.KYC 

comme texte HTML normal

Quelqu'un peut-il me dire pourquoi cela est arrivé? Que dois-je faire pour supprimer la ligne de titre étrange?

Répondre

18

Un est utilisé pour déclarer le type fort que le modèle est, et l'autre est utilisé pour accéder au modèle lui-même. Ce qui suit indique que le type fort utilisé pour le modèle est UniBlue.Models.KYC.

@model UniBlue.Models.KYC 

Cette déclare essentiellement la 'variable' Model comme ce type. Il est proche de la manière suivante:

UniBlue.Models.KYC Model; 

Model est une variable, @model est un mot-clé dire quel type Model sera.

Votre erreur est que vous avez déclaré Model comme KYC, mais KYC n'est pas énumérable. Vous l'utilisez dans un foreach en attendant un IEnumerable<UniBlue.Models.KYC> ce qui n'est pas le cas.

Si votre modèle est vraiment une liste, puis utilisez

@model IEnumerable<UniBlue.Models.KYC> 
+0

Bon point! Mais quelle est la raison pour laquelle il s'exécute quand j'écris comme: Model UniBlue.Models.KYC, aucune valeur assignée au Model lui-même n'est correcte? – LifeScript

+0

Je ne comprends pas votre question. –

+0

mais au lieu d'écrire "modèle UniBlue.Models.KYC", j'ai utilisé "Model UniBlue.Models.KYC" et il a également fonctionné avec succès et affiche bien, donc je ne sais toujours pas pourquoi cela n'a causé aucune exception et obtenir les données de la liste – LifeScript

6

@model indique le type d'une variable vous apparaissez en tant @model

@model string 

@Model.ToUpper(); // works as @Model is of type string