2016-05-01 15 views
-1

私はC#MVCの初心者ですが、私はいくつかのプロジェクトに取り組んでいます。C#MVCのビューでコントローラによって返されたオブジェクトを表示する

インターネットで検索したところ、私の質問に一致する解決策は見つかりませんでした。答えのどれも私の問題を解決しませんでした。問題は、どのようにすべてのプロジェクトをループするか(以下のコードの部分で分かるように)、それらを表示する方法です。

プロジェクトモデルコード:

public class AddProjectViewModel 
    { 
     [Required] 
     [StringLength(50, ErrorMessage = "Project name length is too long. Maximum lenght is 50 char.")] 
     public string ProjectName { get; set; } 

     [Required] 
     [StringLength(50, ErrorMessage = "Description length is too long. Maximum lenght is 50 char.")] 
     public string Description { get; set; } 
    } 

プロジェクトのコントローラコード:

public ActionResult Index() 
    { 
     var loggedUser = _workContext.GetUserId(); 

     var userProjects = _userProjectsRepository.GetAllEntity().Where(x => x.UserId == loggedUser); 

     var model = new Models.ProjectViewModels.ShowUserProjectsViewModel(); 

     model.Projects = userProjects; 

     return View(model); 
    } 

考え方は次のとおりです。アップ時にページが読み込まれると、ユーザーが見ることができますログインし、すべてのプロジェクトを表示します。

私はこのような何かを試してみたが、それは動作しません:

@model IEnumerable<CarPooling.Website.Models.ProjectViewModels> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

@foreach (var item in Model) 
{ 
    <div> 
     <p>@Html.DisplayFor(m=>item)</p> 
    </div> 
} 

してください、私とすべての応答のためのおかげで我慢して。

+0

それが動作しないのはなぜ?あなたは何が起こるべきか、実際に何が起こっているのか、そしてその2つはどう違うのですか? – yaakov

+0

アプリケーションを壊すエラーは、辞書に渡されたモデルアイテムのタイプがIEnumerableではないと言っていました。しかし、私のモデルからIEnumerableを削除したとき、foreachは "CarPooling.Website.Models.ProjectViewModels 'は' CarPooling.Website.Models.ProjectViewModels '型の変数では動作しません。 'GetEnumerator' " – Dariel

+0

_"のパブリック定義が含まれていますが、動作しません "_は適切な説明ではありません。複数のエラーがあり、例外の詳細を質問に含める必要があります。最初の例外は、ビューに渡すモデルが 'ShowUserProjectsViewModel'の単一インスタンスなので、ビューは' ProjectViewModels'のコレクションであると予測します –

答えて

1

コントローラでは、ShowUserProjectsViewModelオブジェクトを表示しますが、.cshtmlビュー内でモデルをIEnumerable<CarPooling.Website.Models.ProjectViewModels>と宣言します。

はあなたのコントローラ内で渡された同じモデルタイプを使用し、また、以下に示すように、あなたのViewModelクラスで定義された同じプロパティを使用することを忘れないでください:

@model ShowUserProjectsViewModel 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

@foreach (var item in Model.Projects) 
{ 
    <div> 
     <p>@Html.DisplayFor(m=>item.ProjectName)</p> 
    </div> 
} 
+0

これは私が欠けていたものです。どうもありがとうございました! – Dariel

関連する問題