2015-05-18 105 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

相關問題