2013-07-19 1 views
9

Fondamentalmente sto facendo un test causato da uno di excpetion.diversi tra @Model e @model

Utilizzando return View(list_a) nel controller I ha approvato una lista in mio punto di vista, sulla mia pagina View, il codice è simile:

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

ci sarà un'eccezione dice:

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

Ma , quando ho cambiato il mio codice in @Modello Page sembra buono ma sul titolo mostra:

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

come normale testo HTML

Qualcuno può dirmi perché è successo? Cosa dovrei fare per rimuovere la strana linea del titolo?

risposta

18

One consente di dichiarare il tipo forte che il modello è, e l'altro viene utilizzato per accedere al modello stesso.

Quanto segue dice che il tipo forte utilizzato per il modello è UniBlue.Models.KYC.

@model UniBlue.Models.KYC 

dichiara Questo fondamentalmente la 'variabile' Model come quel tipo. E 'simile a fare quanto segue:

UniBlue.Models.KYC Model; 

Model è una variabile, @model è una parola chiave dicendo che tipo sarà Model.

Il tuo errore è dovuto al fatto che hai dichiarato Model come KYC, ma KYC non è enumerabile. Lo stai utilizzando in un foreach in attesa di un IEnumerable<UniBlue.Models.KYC> che non è il caso.

Se il modello è davvero una lista, quindi utilizzare

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

buon punto! Ma qual è il motivo per cui viene eseguito quando scrivo: Model UniBlue.Models.KYC, nessun valore assegnato al Modello stesso giusto? – LifeScript

+0

Non capisco la tua domanda. –

+0

ma invece di scrivere "model UniBlue.Models.KYC", ho usato "Model UniBlue.Models.KYC" e anch'esso è stato eseguito correttamente e visualizzato bene, quindi non so ancora perché non ha causato eccezioni e ottenuto i dati della lista – LifeScript

6

@model indica il tipo di una variabile si fa riferimento come @Model

@model string 

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