2015-05-18 64 views
0

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

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

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

我对控制器的ActionResult:

[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); 
    } 

的问题是:我的变量 “resultado” 留下空! AJAX没有发送这些ID。如果我在resultado上放置一个断点,我可以看到AJAX发送对象,但我看不到这些ID。

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

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

我不知道如果我能很清楚,但我希望你能有所帮助。

谢谢。

+0

将对象转换为JSON并将JSON作为字符串发送到调用,然后在方法内部将字符串转换回对象 –

+0

@jcuenod当然,我的坏,对不起!我现在要做到这一点!谢谢你们。我不能为你的答案投票,因为我没有这个声望,但我接受了我自己的答案,就像解决方案一样,只是我能做到。再见。 – Paschoali

回答

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是我的网页和一些隐藏的一种形式。我不知道是否清楚,但对我有用。

感谢您的支持。

0

您需要data: JSON.stringify({ "carrinho": carrinho })并且还要将contentType: 'application/json; charset=utf-8',添加到ajax调用中。

0

Javascript Object Literal Syntax!== JSON。

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

0

句法如data: { "carrinho": carrinho }可以工作,$.ajax确实接受PlainObject作为data(请参见http://api.jquery.com/jquery.ajax/)。

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

的PlainObject类型为包含了零个或多个键值对

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

根据什么carrinho是,你可以有成功与stringify作为替代JavaScript对象:

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

嗨。还是错的:/!谢谢你的回答,并感谢厄齐尔和亚历克斯!我的AJAX是这样,现在: 功能verCarrinho(){$ 阿贾克斯({ 类型: “POST”, URL: “/ Produto/Carrinho”, 的contentType:“应用/ JSON的;字符集= UTF- 8“, data:JSON.stringify({”carrinho“:carrinho}), 成功:function(e){(”#listaProdutos“)。html(e); } }); } #listaProdutos是一个空的ul标签。当我在控制器上调试结果var时,出现空值:( – Paschoali

+0

@Pasch'console.log(carrinho)'的输出是什么? – jcuenod

+0

嗨,我根据朋友的代码改变了我的代码,它会工作。它在这里的答案,好吗?如果你可以再评论,我会apreciate。 – Paschoali

相关问题