2017-09-30 19 views
-1

Asp.net MVCを学び始めています。私のページにIEnumerableショーを作成する際に問題があります。Asp.net - MVC - ViewModelでIEnumerableを使用して空のモデルを返します

今、私はViewModelでプロジェクトのリストを渡して、レイアウトページの一部を表示しようとしています。

伝統的なビューでリストを渡すと、それは機能します。 Viewモデルで単一のアイテムを渡すと、それも機能しますが、IENumeratorを渡すと、モデルはnullを返します。 私が答えを探しているのは3日間です。

ここに私のPROJETOモデル

namespace Athena_web.Models 
{ 
public class Projeto 
{ 
    public int Id { get; set; } 
    public String Nome { get; set; } 
} 
} 

はここに私のPROJETOコントローラ

using Athena_web.Models; 
using Athena_web.ViewModel; 

namespace Athena_web.Controllers 
{ 
public class ProjetosController : Controller 
{ 
    // GET: Projetos 
    public ActionResult ListaProjetos() 
    { 
     var projetos = GetProjetos(); 

     var viewModel = new ProjetosControllerViewModel 
     { 
      Projetos = projetos 
     }; 

     return PartialView(viewModel); 
    } 
    private IEnumerable<Projeto> GetProjetos() 
    { 
     return new List<Projeto> 
     { 
      new Projeto() {Id = 1, Nome = "Projeto A"}, 
      new Projeto() {Id = 1, Nome = "Projeto 2"}, 
      new Projeto() {Id = 3, Nome = "Projeto C"} 
     }; 
    } 
} 
} 

これは私ProjetosControllerViewModel

namespace Athena_web.ViewModel 
{ 
public class ProjetosControllerViewModel 
{ 
    public IEnumerable<Projeto> Projetos { get; set; } 
} 
} 

であり、これは私の意見です。

ここで

私は

<div class="menuLateral"> 
     <!-- a soma da largura dessa div com a div telaConteudo deve ser de 100%--> 
     @Html.Partial("~/Views/Projetos/_ListaProjetos.cshtml") 

     <div class="menuExtras"> 
      <!-- essa parte da separado do menu lateral por questão de posicionamento. Essa parte vai ficar lá embaixo--> 
      <div class="mensagemUsuario"> 
       <!-- coloca o background dessa div como a imagem mensagem.png, background repeat: no-repeat e background-position left--> 
       Mensagem 
      </div> 
      <div class="downloadUsuario"> 
       <!-- Mesmo esquema de mensagem --> 
       Download 
      </div> 
     </div> 

    </div> 

私の部分ビューをレンダリング私のレイアウトページは、あなたがビューにProjetosControllerViewModelにビューモデルを受け入れなければなら事前

+1

あなたのビューには、 'IEnumerable 'が必要です。代わりに 'ProjetosControllerViewModel'のインスタンスを渡しています。それ自体は' IEnumerable'ではありませんが、そのプロパティはです。 'viewModel.Projetos'をビューに渡すか、' ProjetosControllerViewModel'を受け入れ、 'Model.Projetos'を列挙するようにビューを変更してください。 – GSerg

+0

どのように部分ビューを呼び出していますか? – Shyju

+0

@ Html.Partial( "〜/ Views/Projetos/_ListaProjetos.cshtml") (私はそれが最高ではないことを知っていますが、働いたのはそれだけでした) –

答えて

1

にありがとうございます。以下に変更しビューコード:

@model Athena_web.ViewModel.ProjetosControllerViewModel 

<div class="menuFeature"> 
    <div class="featureProjeto"> 
     Projetos 
    </div> 

    <div class="listaProjetos"> 
     <ul> 
      @if (!Model.Projetos.Any()) 
      { 
       <li>Cadastre um projeto</li> 
      } 
      @foreach (var projeto in Model.Projetos) 
      { 
       <li>@projeto.Id, @projeto.Nome</li> 
      } 
     </ul> 
    </div> 
</div> 

また、この部分to.repalceを呼び出す方法に変更:

@{Html.RenderAction("ListaProjetos", "Projetos");} 

@Html.Partial("~/Views/Projetos/_ListaProjetos.cshtml") 

また_ListaProjetosから名前の一部を変更しますListaProjetos

+0

私のコードをあなたが私に与えたものに変更しましたが、モデルはまだnullとして返されます –

+0

ここでmodelはnullですか?ビューで?エラーがありますか? –

+0

ビューのforeachモデルの内部。 –

関連する問題