web-dev-qa-db-ja.com

@Modelと@modelで異なります

基本的に私は、例外の1つによって引き起こされたテストを行っています。

コントローラで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 Pageに変更すると見栄えが良くなりますが、タイトルには次のように表示されます。

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

通常のHTMLテキストとして

なぜこれが起こったのか誰か教えてもらえますか?奇妙なタイトル行を削除するにはどうすればよいですか?

13
LifeScript

1つはモデルの厳密な型を宣言するために使用され、もう1つはモデル自体にアクセスするために使用されます。

以下は、モデルに使用されるストロングタイプがUniBlue.Models.KYCであることを示しています。

@model UniBlue.Models.KYC

これは基本的に '変数' Modelをその型として宣言します。これは、次のことを行うのと似ています。

UniBlue.Models.KYC Model;

Modelは変数、@modelModelのタイプを示すキーワードです。

エラーは、ModelをKYCとして宣言したが、KYCを列挙できないためです。 foreachで使用しており、IEnumerable<UniBlue.Models.KYC>を期待していますがそうではありません。

モデルが本当にリストである場合は、

@model IEnumerable<UniBlue.Models.KYC>
27
Matt Houser

@modelは、@ Modelとして参照する変数のタイプを示します

@model string

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