2013-07-19 4 views
9

В основном я делаю тест, вызванный одним из упражнений.разные между @Model и @model

С помощью return View(list_a) в контроллере я передал список на мой взгляд, на моей странице просмотра, код как:

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

будет исключением говорит:

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

Но , когда я сменил свой код на @Model Страница выглядит хорошо, но на заголовке, который он показывает:

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

как обычный текст HTML

Может кто-нибудь сказать мне, почему это произошло? Что делать, чтобы удалить странную строку заголовка?

ответ

18

One используются для объявления сильного типа, модель, а другие используются для доступа к самой модели.

Далее указано, что сильный тип, используемый для модели, - UniBlue.Models.KYC.

@model UniBlue.Models.KYC 

В основном это объявляет «переменная» Model в качестве этого типа. Это сродни делать следующее:

UniBlue.Models.KYC Model; 

Model является переменной, @model является ключевым словом говоря, какой тип Model будет.

Ошибка Ваша ошибка в том, что вы указали Model как KYC, но KYC не перечислим. Вы используете его в foreach, ожидая IEnumerable<UniBlue.Models.KYC>, что не так.

Если ваша модель действительно список, а затем использовать

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

Хороший вопрос! Но какова причина, по которой он работает, когда я пишу, как: Model UniBlue.Models.KYC, нет значения, присвоенного самой модели? – LifeScript

+0

Я не понимаю ваш вопрос. –

+0

, но вместо написания «model UniBlue.Models.KYC» я использовал «Model UniBlue.Models.KYC», и он также успешно работал и хорошо отображался, поэтому я до сих пор не знаю, почему это не вызвало каких-либо исключений и не получило данные списка – LifeScript

6

@model обозначает тип переменных вы ссылаетесь, как @model

@model string 

@Model.ToUpper(); // works as @Model is of type string 
Смежные вопросы