这个问题被问了很多,但没有一个答案对我有用。我正在尝试将一个对象列表发送到ASP MVC 5中的控制器。我JOSN.stringify
在列表中,并尝试将其接收到列表中。
我当然希望这不是一些我错过的愚蠢错字......
嗯我确实发现了一个错字(有趣的是写下来有帮助),但这不是问题。 ajax称为“Sale”,但控制器为“Sales”。我修好了,但仍然是同样的问题。 (最后添加图片)。
修改
我将ajax更改为:
$('#complete-sale').on('click', function ()
{
alert("in complete sale");
var itemsInCart = JSON.stringify(shoppingCart.getItemsInCart());
alert("itemsInCart: " + itemsInCart);
$.ajax({
type: "GET",
url: "/Sales/completeSale", // the method we are calling
contentType: "application/json; charset=utf-8",
data: { 'itemsInCart': itemsInCart },
dataType: "json",
success: function (result) {
alert("sale complete succeeded" + result[0]);
addItemToCart(result[0]);
},
error: function (result) {
alert("failed complete sale request " + result[0]);
}
});
});
开发人员工具中显示的请求网址现在是:
http://localhost:52459/Sales/completeSale?itemsInCart=[{"ItemId":1,"Quantity":"1","Price":3.5}]
这似乎应该是正确的。我还将控制器返回到return View("hello")
,所以实际上会有一些回复。
型号:
public class ItemInCart
{
[Key]
public int ItemId { get; set; }
public virtual Variety variety { get; set; }
public int Quantity { get; set; }
public virtual InventoryItem inventoryItem { get; set; }
public double Price { get; set; }
public virtual Variety price { get; set; }
}
控制器(Sales.cs
):
[HttpGet]
public ActionResult completeSale(List<ItemInCart> itemsInCart)
{
return View();
}
的Ajax:
$('#complete-sale').on('click', function ()
{
alert("in complete sale");
itemsInCart = shoppingCart.getItemsInCart();
stringifiedItemsInCart = JSON.stringify({ 'itemsInCart': itemsInCart});
alert("stringified: " + stringifiedItemsInCart);
$.ajax({
type: "GET",
url: "/SalescompleteSale", // the method we are calling
contentType: "application/json; charset=utf-8",
data: stringifiedItemsInCart,
dataType: "json",
success: function (result) {
alert("sale complete succeeded" + result[0]);
addItemToCart(result[0]);
},
error: function (result) {
alert("failded complete sale request " + result[0]);
}
});
});
答案 0 :(得分:0)
前几天我遇到了这个问题,它可能有点令人困惑,特别是在你是方法签名涉及视图模型列表的情况下。
JSON.stringify()
似乎总是对POST
数据很有用,也许其他人可以解释原因,但对于GET
请求,它不是正确的解决方案。
我遇到的问题是请求包含int
列表的网址,并且像您一样,它要么以null
出现,要么出错。我实际需要做的是创建一个查询字符串:?selectedIds=1&selectedIds=2&selectedIds=3
。