Asp.Net - MVC - 在Viewmodel上使用IEnumerable返回空模型

时间:2017-09-30 17:15:34

标签: asp.net-mvc

我开始学习Asp.net MVC,而且我在我的页面上制作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; }
}
}

这是我的观点:

    @using Athena_web.Controllers
@using Athena_web.Models
@using Athena_web.ViewModel
@model IEnumerable<Athena_web.ViewModel.ProjetosControllerViewModel>
<div class="menuFeature">

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

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

这是我的布局页面,我在其中渲染我的局部视图

<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>

提前谢谢

1 个答案:

答案 0 :(得分:1)

您必须在View中接受视图模型到ProjetosControllerViewModel。将视图代码更改为以下内容:

@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>

同样改变调用partial to.repalce的方式:

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

使用

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

同时将部分名称从 _ListaProjetos 更改为 ListaProjetos