Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

AULA 7 - NullReferenceException

Olá, nas páginas Livros/Lendo e Livros/Lidos está dando erro de NullReferenceException

NullReferenceException: Object reference not set to an instance of an object. AspNetCore._Views_Livros_lista.<ExecuteAsync>b__8_1() in lista.cshtml -

    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <ul>
        @foreach (var livro in ViewBag.Livros)
        {
            <li>@livro.Titulo - @livro.Autor</li>
        }
    </ul>
</body>
</html>

Classe LivrosController:

using Alura.ListaLeitura.App.Negocio;
using Alura.ListaLeitura.App.Repositorio;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;

namespace Alura.ListaLeitura.App.Logica
{
    public class LivrosController : Controller
    {
        public IEnumerable<Livro> livros { get; set; }

        public string Detalhes(int id)
        {
            var _repo = new LivroRepositorioCSV();
            var livro = _repo.Todos.First(l => l.Id == id);

            return livro.Detalhes();
        }

        public static string CarregaLista(IEnumerable<Livro> livros)
        {
            var conteudoDoArquivo = HTML.HTMLUtils.CarregaArquivoHTML("para-ler");

            foreach (var livro in livros)
            {
                conteudoDoArquivo = conteudoDoArquivo.Replace("#NOVO-ITEM#", $"<li>{livro.Titulo} - {livro.Autor}#NOVO-ITEM#");
            }
            return conteudoDoArquivo.Replace("#NOVO-ITEM#", string.Empty);
        }

        public IActionResult ParaLer()
        {
            var _repo = new LivroRepositorioCSV();
            ViewBag.Livros = _repo.ParaLer.Livros;            
            return View("lista");
        }

        public IActionResult Lendo()
        {
            var _repo = new LivroRepositorioCSV();
            ViewBag.Lendo = _repo.Lendo.Livros;
            return View("lista");
        }

        public IActionResult Lidos()
        {
            var _repo = new LivroRepositorioCSV();
            ViewBag.Lidos = _repo.Lidos.Livros;
            return View("lista");
        }
    }
}

View lista.cshtml:

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <ul>
        @foreach (var livro in ViewBag.Livros)
        {
            <li>@livro.Titulo - @livro.Autor</li>
        }
    </ul>
</body>
</html>
1 resposta
solução!

Coloquei o meu código com o código do professor no WinMerge e achei o erro:

O nome dá propriedade da ViewBag está errado nos métodos Lendo e Lidos.

No método Lendo estava:

ViewBag.Lendo

Quando o correto é:

ViewBag.Livros

No método Lidos estava:

ViewBag.Lidos

Quando o correto é:

ViewBag.Livros