2013-07-19 22 views
9

Grundsätzlich mache ich einen Test, der durch eine Exception verursacht wird.unterscheidet zwischen @Model und @Modell

Durch die Verwendung von return View(list_a) in Controller ich eine Liste in meiner Ansicht übergeben, auf meiner Seite anzeigen, ist der Code wie:

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

es wird eine Ausnahme sagt:

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

Aber , wenn ich meinen Code änderte @Modell Seite sieht gut aus, aber auf den Titel zeigt es:

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

als normaler HTML-Text

Kann mir jemand sagen, warum das passiert ist? Was soll ich tun, um die seltsame Titellinie zu entfernen?

Antwort

18

One verwendet werden, beziehen sich die starke Art zu erklären, dass das Modell ist, und das andere verwendet wird sich das Modell zugreifen.

Folgendes besagt, dass der für das Modell verwendete starke Typ UniBlue.Models.KYC ist.

@model UniBlue.Models.KYC 

Dieser im Grunde erklärt die 'Variable' Model als dieser Typ. Es ist ähnlich folgendes zu tun:

UniBlue.Models.KYC Model; 

Model eine Variable, @model ein Schlüsselwort ist zu sagen, welche Art Model sein wird.

Ihr Fehler ist, weil Sie Model als KYC deklariert haben, aber KYC ist nicht aufzählbar. Sie verwenden es in einem foreach erwartet ein IEnumerable<UniBlue.Models.KYC> was nicht der Fall ist.

Wenn Ihr Modell wirklich eine Liste ist, dann verwenden

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

Guter Punkt! Aber was ist der Grund dafür, dass es läuft, wenn ich schreibe: Model UniBlue.Models.KYC, kein Wert, der dem Model selbst zugewiesen ist, oder? – LifeScript

+0

Ich verstehe deine Frage nicht. –

+0

aber anstatt "Modell UniBlue.Models.KYC" zu schreiben, habe ich 'Model UniBlue.Models.KYC' verwendet und es lief auch erfolgreich und gut anzeigen, so dass ich immer noch nicht weiß, warum das keine Ausnahmen verursacht und bekommen die Listendaten – LifeScript

6

@model bezeichnet den Typ einer Variablen Sie als @Model

@model string 

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