namespace ExemploValidacao.Models
{
public class Noticia
{
public int NoticiaId { get; set; }
public string Titulo { get; set; }
public string Conteudo { get; set; }
public string Categoria { get; set; }
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime Data { get; set; }
//banco de dados temporário
public IEnumerable<Noticia> TodasAsNoticias()
{
var retorno = new Collection<Noticia>
{
new Noticia
{
NoticiaId = 1,
Categoria = "Esportes",
Titulo = "Felipe Massa ganha F1",
Conteudo = "Numa tarde de chuva Felipe Massa ganha F1 no Brasil...",
Data = new DateTime(2012,7,5)
},
new Noticia
{
NoticiaId = 2,
Categoria = "Política",
Titulo = "Presidente assina convênios",
Conteudo = "Durante reunião o presidente Ismael Freitas assinou os convênios...",
Data = new DateTime(2012,7,3)
},
new Noticia
{
NoticiaId = 3,
Categoria = "Política",
Titulo = "Vereador é eleito pela 4ª vez",
Conteudo = "Vereador Fabio Pratt é eleito pela quarta vez...",
Data = new DateTime(2012,7,20)
},
new Noticia
{
NoticiaId = 4,
Categoria = "Esportes",
Titulo = "O tão sonhado titulo chegou",
Conteudo = "Em um jogo que levou os torcedores ao delirio...",
Data = new DateTime(2012,7,18)
},
new Noticia
{
NoticiaId = 5,
Categoria = "Humor",
Titulo = "O Comediante Anderson Renato fará shou hoje",
Conteudo = "O comediante mais engraçados dos comentários do Youtube fará show...",
Data = new DateTime(2012,7,14)
},
new Noticia
{
NoticiaId = 6,
Categoria = "Policial",
Titulo = "Tenente coronel Lucas Farias Santos assume o controle",
Conteudo = "Durante a retomada do morro o tenente coronel disse...",
Data = new DateTime(2012,7,19)
},
new Noticia
{
NoticiaId = 7,
Categoria = "Esportes",
Titulo = "Atacante do Barcelona faz 4 gols",
Conteudo = "O atacante Lucas Farias Santos Messi, fez 4 gols e decidiu o titulo...",
Data = new DateTime(2012,7,8)
}
};
return retorno;
}
}
}
Controller:
namespace ExemploValidacao.Controllers
{
public class NoticiaController : Controller
{
//criou uma lista/ array do tipo "Noticia"
private readonly IEnumerable<Noticia> todasAsNoticias;
public NoticiaController()
{
//pega as notícias na ordem decrescente pelas datas
todasAsNoticias = new Noticia().TodasAsNoticias().OrderByDescending(x => x.Data);
//Noticia noticia = new Noticia();
//todasAsNoticias = noticia.TodasAsNoticias().OrderByDescending(x => x.Data);
}
public ActionResult IndexNoticia()
{
var ultimasNoticias = todasAsNoticias.Take(3);
var todasAsCategorias = todasAsNoticias.Select(x => x.Categoria).Distinct().ToList();
//posso acessar a var "todasAsCategorias" na View através da ViewBag
ViewBag.Categorias = todasAsCategorias;
return View(ultimasNoticias);
}
}
}
View:
@model IEnumerable<ExemploValidacao.Models.Noticia>
@{
ViewBag.Title = "Index";
}
<h2>Rotas em ASP.NET MVC</h2>
<div>
<ul>
@*LISTA DE TODAS AS CATEGORIAS*@
@foreach (string item in ViewBag.Categorias)
{
<li>@Html.ActionLink(item, "MostraCategoria", "Noticia", new { @categoria = item }, null)
</li>
}
</ul>
</div>
<div>
<ul>
@*LISTA DAS ÚLTIMAS 3 NOTÍCIAS*@
@foreach (var item in Model)
{
<li>
@Html.ActionLink(item.Titulo, "MostraNoticia", "Noticia", new
{
@noticiaId = item.NoticiaId,
@categoria = item.Categoria.ToLower(),
@titulo = item.Titulo.ToLower()
}, null)
<em>@Html.DisplayFor(modelItem => item.Categoria)</em>
<b>@Html.DisplayFor(modelItem => item.Data)</b>
</li>
}
</ul>
</div>
<div>
@Html.ActionLink("Todas as Noticias", "TodasAsNoticias", "Noticia")
</div>
Print: Asyoucanseeinprint,var"ultimasNoticias" shows "count" as 0. Should not it show 3 indexes because of the "Take (3)" method? When I run the project, it shows exactly 3 indexes in the View list.
My project: link