Does not list database data correctly in ASP.NET View

0

The data was entered in the database, but in the View it does not show one of the fields.

I've checked in SQL Server and it's all right, but the name field returns empty in view

public ActionResult Index()
{
    List<MovimentacaoVM> lispedido;
    using (Db db = new Db())
    {
        lispedido = db.Movimentacao.ToArray()
                      .OrderBy(x => x.MovimentacaoId)
                      .Select(x => new MovimentacaoVM(x)).ToList();
    }

    return View(lispedido);           
}

View code:

@model IEnumerable<PraticaNtoN.Models.MovimentacaoVM>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Criar")
</p>
<table class="table">
    <tr>

        <th>
            @Html.DisplayNameFor(model => model.ProdutoNome)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ClienteNome)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DataCriacao)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>

        <td>
            @Html.DisplayFor(modelItem => item.ProdutoNome)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ClienteNome)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DataCriacao)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.MovimentacaoId }) |
            @Html.ActionLink("Details", "Details", new { id=item.MovimentacaoId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.MovimentacaoId })
        </td>
    </tr>
}

</table>

Method MovimentacaoVM

public MovimentacaoVM(Movimentacao row)
{
    MovimentacaoId = row.MovimentacaoId;
    ClienteId = row.ClienteId;
    DataCriacao = row.DataCriacao;
    ProdutoId = row.ProdutoId;
    ProdutoNome = row.ClienteNome;
    ProdutoNome = row.ProdutoNome;
}
    
asked by anonymous 05.02.2018 / 16:48

1 answer

3

First a tip: do not sort the data into memory unless you have a reason for it. Of course this is not a recipe you should follow blindly, but most often delegating the order to the database is much more performative.

You can see more details about this at: At what point does the Entity Framework query an IQueryable?

public ActionResult Index()
{
    List<MovimentacaoVM> lispedido;
    using (Db db = new Db())
    {
        lispedido = db.Movimentacao.OrderBy(x => x.MovimentacaoId) //Remova o ToArray()
                      .Select(x => new MovimentacaoVM(x)).ToList();
    }

    return View(lispedido);           
}

Second, your mistake is quite simple. See the MovimentacaoVM method, which is the method that selects the items

public MovimentacaoVM(Movimentacao row)
{
    MovimentacaoId = row.MovimentacaoId;
    ClienteId = row.ClienteId;
    DataCriacao = row.DataCriacao;
    ProdutoId = row.ProdutoId;
    //ProdutoNome = row.ClienteNome;  // <----- Isso está errado
    ClienteNome = row.ClienteNome;  // <------- Deveria ser isto
    ProdutoNome = row.ProdutoNome;
}
    
05.02.2018 / 17:02