AJAX updating the wrong table

Asked

Viewed 54 times

0

I have this AJAX function to update a table, it is this way:

 function incluirFornecedor(idItem) {
    var url = "/Produto/incluirFornecedorN";
    $.ajax({
        url: url
        , data: { id: idItem }
        , type: "POST"
        , datatype: "html"
        , success: function (data) {
            $("#tabelaf").html("");
            $(data).each(function () {
                $("#tabelaf").append("<tr><td>" + data.resultado + "</td><td>" + data.ProdutoID + "</td></tr>");
            });
        }
    });
}

And here is the function of the controller:

[HttpPost]
    public ActionResult incluirFornecedorN(int id)
    {
        int produtoID = (db.Produtos.Max(a => a.Id) + 1);
        var fornecedor_produto = db.ProdutosFornecedores.Where(p => p.ProdutoID == produtoID).Where(p => p.FornecedorID == id).ToList();

        var item = new ProdutosFornecedores()
        {
            FornecedorID = id,
            ProdutoID = (produtoID)
        };

        return Json(new { Resultado = item.FornecedorID, item.ProdutoID });
    }

Only that it appears the id, I wanted it to appear the name, same is in the table, follow the HTML:

 <table class="table table-responsive table-hover" id="tabelaf">
                        <tbody>
                            @foreach (var item in Model.ProdutosFornecedores)
                            {
                                <tr class="tr">
                                    <td>@item.FornecedorProduto.Nome</td>
                                    <td align="right">
                                        <a class="link-excluir" href="#" data-id="@item.Id" title="Excluir"><i class="fa fa-trash-o fa-lg"></i></a>&nbsp;
                                    </td>
                                </tr>
                            }
                        </tbody>
                    </table>

It brings the id, in Viewmodel, has the setting to appear the name correctly, only when adding by ajax, it does not appear.

  • In the controller you’re just returning id. You need to add the nome in return for use in the view.

1 answer

1

Instead of:

var item = new ProdutosFornecedores()
    {
        FornecedorID = id,
        ProdutoID = (produtoID)
    };

Put something like:

var item = new ProdutosFornecedores()
    {
        FornecedorProduto = fornecedor_produto,
        ProdutoID = (produtoID)
    };

And on the return of JSON, refer FornecedorProduto, and not FornecedorId.

  • What it looks like, looking at your code, is that you might be confused when passing the id instead of the name (which you captured to vendor_product in the controller).

  • It does not accept, it returns me the following error: It is not possible to convert implicitly type "System.Collections.Generic.List<string>" in "Erp.Models.Vendor"

Browser other questions tagged

You are not signed in. Login or sign up in order to post.