我有一个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;
}
我不知道自己是否清楚,但我希望你能帮忙。
谢谢。
答案 0 :(得分:0)
您需要tableView
并将[tableView.dataSource tableView:tableView numberOfRowsInSection:[indexPath section]]
添加到ajax调用。
答案 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是我页面上的表单和隐藏的输入。我不知道它是否清楚,但对我有用。
感谢您的支持。