我开始学习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>
提前谢谢
答案 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