我的控制器没有收到AJAX请求的ID

时间:2015-05-18 14:38:25

标签: javascript c# ajax asp.net-mvc

我有一个JavaScript函数,它使用AJAX请求将数据发送到asp.net MVC上的控制器。看:

function verCarrinho() {
$.ajax({
    type: "POST",
    url: "/Produto/Carrinho",
    data: { "carrinho": carrinho },
    success: function (e) {
    }
});
}

carrinho是一个有两个属性的数组。其中一个属性是我需要发送给我的控制器以使用EF在我的数据库上进行查询的ID。

我在控制器上的行动:

[HttpPost]
    public ActionResult Carrinho(List<Carrinho> carrinho)
    {
        var ids = carrinho.Select(s => s.idLivro).ToList();
        var resultado = db.Produtos.Where(w => ids.Contains(w.idProduto));
        return PartialView("_Carrinho", resultado);
    }

问题是:我的变量&#34; resultado&#34;保持空虚! AJAX没有发送ID。如果我在resultado上设置断点,我可以看到AJAX发送对象,但我看不到ID。

我有一个类相同类型的参数:

public class Carrinho
{
    public int idLivro;
    public int qtdProduto;
}

我不知道自己是否清楚,但我希望你能帮忙。

谢谢。

4 个答案:

答案 0 :(得分:0)

您需要tableView并将[tableView.dataSource tableView:tableView numberOfRowsInSection:[indexPath section]] 添加到a​​jax调用。

答案 1 :(得分:0)

Javascript Object Literal Syntax!== JSON。

您需要在ajax请求中JSON.stringify() data个对象。

答案 2 :(得分:0)

data: { "carrinho": carrinho }之类的语法可以正常工作,$.ajax接受PlainObject作为data(请参阅http://api.jquery.com/jquery.ajax/)。

您的问题是,您的变量carrinho不符合PlainObject的要求。

  

PlainObject类型是包含零个或多个键值对的JavaScript对象

http://api.jquery.com/Types/#PlainObject

根据carrinho的内容,您可能会成功stringify作为替代方案:

function verCarrinho() {
  $.ajax({
    type: "POST",
    url: "/Produto/Carrinho",
    data: JSON.stringify({ "carrinho": carrinho }),
    success: function (e) {
    }
  });
}

答案 3 :(得分:0)

我根据朋友的代码改变了我的代码并且它有效。它看起来像这样:

namespace WebAppImaginario.Models
{
public class ItemCarrinho
  {
    public int idLivro { get; set; }
    [DisplayName("Quantidade do Produto")]
    public int qtdProduto { get; set; }
    [DisplayName("Nome do Produto")]
    public string nomeProduto { get; set; }
    [DisplayName("Descrição do Produto")]
    public string descProduto { get; set; }
    [DisplayName("Preço do Produto")]
    public decimal precProduto { get; set; }
    [DisplayName("Desconto da Promoção")]
    public decimal descontoPromocao { get; set; }
    [DisplayName("Imagem")]
    public byte[] imagem { get; set; }
  }
}

控制器:

[HttpPost]
    public ActionResult Carrinho(string hidCarrinho)
    {
        List<ItemCarrinho> listaCarrinho = new List<ItemCarrinho>();

        if (hidCarrinho != null)
        {
            var itens = JsonConvert.DeserializeObject<List<ItemCarrinho>>(hidCarrinho);

            foreach (var item in itens)
            {
                var qtd = int.Parse(new string(item.qtdProduto.ToString().Where(char.IsDigit).ToArray()));
                if (qtd > 0)
                {
                    var idLivroNumerico = int.Parse(new string(item.idLivro.ToString().Where(char.IsDigit).ToArray()));
                    var resultado = db.Produtos.Where(m => m.idProduto == idLivroNumerico).FirstOrDefault();
                    ItemCarrinho prod = new ItemCarrinho();
                    prod.idLivro = idLivroNumerico;
                    prod.qtdProduto = qtd;
                    prod.nomeProduto = resultado.nomeProduto;
                    prod.descProduto = resultado.descProduto;
                    prod.precProduto = resultado.precProduto;
                    prod.descontoPromocao = resultado.descontoPromocao;
                    prod.imagem = resultado.imagem;
                    listaCarrinho.Add(prod);
                }
            }
        }

        return View(listaCarrinho);
    }

JavaScript的:

function setValueEnviar() {
$("#hiddenInputContainer").empty();

for (var i = 0; i < carrinho.length; i++) {
    var newInput = document.createElement('input');
    newInput.type = "hidden";
    newInput.value = JSON.stringify(carrinho[i]);
    newInput.name = 'data';
    $("#hiddenInputContainer").append(newInput);
 }
}

$('#formCarrinho').submit(function (e) {
  e.preventDefault();
  $('#hidCarrinho').val(JSON.stringify(carrinho));
  document.formCarrinho.submit();
})

这些ID是我页面上的表单和隐藏的输入。我不知道它是否清楚,但对我有用。

感谢您的支持。