Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como consultar uma tabela com o asp.net core, realizei os passos do curso 1 para base em uma outra ferramenta , porem não encontrei nada que faça essa consulta pela view.

@{
    ViewData["Title"] = "Index";
}

<h2>Busca Contato</h2>
<br>
<div class="form-group">
    <input type="text" class="form-control" id="buscar" placeholder="Buscar">
</div>
<br>
<table class="table">
    <thead class="thead-dark">
        <tr>
            <th scope="col">NOME</th>
            <th scope="col">UNIDADE</th>
            <th scope="col">DEPARTAMENTO</th>
            <th scope="col">TELEFONE</th>
            <th scope="col">RAMAL</th>
            <th scope="col">EMAIL</th>
        </tr>
    </thead>  
    <!-- Quero fazer a busca no campo (bucar) com os valores de Nome, Unidade, Departamento, Telefone, Ramal e Email. No C# é facil fazer com expressões SQL usando o OR, mas não faço ideia de como criar isso nessa aplicação web usando o Asp.Net Core --> 
    <tbody>    
        @foreach (var contato in Model)
        {
            if (contato.where(buscar == contato.name).Any())
            {
                <tr>
                    <th>@contato.Nome</th>
                    <td>@contato.Unidade</td>
                    <td>@contato.Departamento</td>
                    <td>@contato.Telefone</td>
                    <td>@contato.Ramal</td>
                    <td>@contato.Email</td>
                </tr>
            }
        }
    </tbody>
</table>
2 respostas

Oi, Thiago, tudo bem?

Não é adequado acessar os dados diretamente a partir da view, pois isso viola o princípio de separação de responsabilidades do padrão MVC.

O mais adequado é passar os dados para a view a partir do Controller.

No projeto do curso, usamos o padrão Repository para o acesso aos dados. Um repositório pode acessar os dados no banco utilizando um mecanismo de mapeamento objeto-relacional, como fizemos no curso:

1) Primeiro, quem exibe os dados é a View. Uma view do MVC precisa saber qual a origem do modelo de dados. Isto é, qual classe vai fornecer todos os dados de que a view precisa para exibir as informações na página. Para issocriamos uma diretiva @model na view de Carrossel.

https://github.com/alura-cursos/ASPNETCore20/blob/master/Aulas/Aula5/CasaDoCodigo/Views/Pedido/Carrossel.cshtml

@model List<Produto>;

2) Quem fornece os dados para a view é o Controller. E ele faz isso no método Carrossel, que tem o mesmo nome da view. Note como o controller está buscando os dados a partir de produtoRepository.GetProdutos().

https://github.com/alura-cursos/ASPNETCore20/blob/master/Aulas/Aula5/CasaDoCodigo/Controllers/PedidoController.cs

public class PedidoController : Controller
.
.
.
public IActionResult Carrossel()
{
    return View(produtoRepository.GetProdutos());
}

3) O ProdutoRepository possui o método GetProdutos(), que retorna a lista de produtos do nosso catálogo através das entidades do repositório, com o método dbSet.ToList();.

https://github.com/alura-cursos/ASPNETCore20/blob/master/Aulas/Aula5/CasaDoCodigo/Repositories/BaseRepository.cs

public class ProdutoRepository : BaseRepository<Produto>, IProdutoRepository
.
.
.
public IList<Produto> GetProdutos()
{
    return dbSet.ToList();
}

4) O dbSet é um conjunto de dados que está conectado com o banco de dados através do mecanismo de mapeamento de objetos (ORM) do Entity Framework Core. Esse mecanismo vai fazer a tabela do banco de dados PRODUTOS ser relacionada à entidade Produto do modelo. O dbSet é um campo da classe-base BaseRepository:

https://github.com/alura-cursos/ASPNETCore20/blob/master/Aulas/Aula5/CasaDoCodigo/Startup.cs

public abstract class BaseRepository<T> where T : BaseModel
.
.
.
protected readonly DbSet<T> dbSet;
public BaseRepository(ApplicationContext contexto)
{
    this.contexto = contexto;
    dbSet = contexto.Set<T>();
}

5) Como o controller PedidoController recebe o parâmetro IProdutoRepository no seu construtor como uma instância da classe concreta ProdutoRepository? O próprio sistema de Injeção de Dependência do ASP.NET Core faz isso. Mas antes, foi necessário configurar o mapeamento entre a interface IProdutoRepository e a classe ProdutoRepository:

https://github.com/alura-cursos/ASPNETCore20/blob/master/Aulas/Aula5/CasaDoCodigo/Startup.cs

public void ConfigureServices(IServiceCollection services)
.
.
.
services.AddTransient<IProdutoRepository, ProdutoRepository>();
solução!

Consigo fazer um campo de consulta na View de Carrossel, e definir os parâmetros no produtoRepository, ou tem que ser na Controller? e Como podemos fazer essa consulta na Lista?