【发布时间】:2017-10-20 12:33:59
【问题描述】:
Ajax 调用有效,但传递的对象为空。
这是将购物车对象传递给控制器操作的简单设置。
调用发生了,但是当它点击 Action 时,man 是空的。
正在发送的paylod(在chrome中)是:
{"man":"testtext2"}
回复是:
{"man":null}
.net caritem:
public class Cartitem
{
public string man { get; set; }
}
Javascript 购物车:
class cartitem {
constructor( _man, ) {
this.man = _man;
}
}
控制器动作:
[HttpPost]
public ActionResult AddToCart(Cartitem myCartitem)
{
//ERROR: cartitem values are coming in empty
return Json(myCartitem);
}
Javascript
$(".AddLink").click(function () {
var json = JSON.stringify(c);
var cartitem = JSON.stringify({
'man': 'testtext2',
});
$.ajax({
type: "POST",
url: '@Url.Action("AddToCart", "ShoppingCart")',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: cartitem,
success: function (data) {
alert("Data Back: " + data.man);
}
});
});
编辑 为了消除大量的红色听证会,我简化了代码,使其成为一个字符串(人)。 结果是一样的,MyCaritem 是空的。
【问题讨论】:
-
当
qty和price应该分别是 int 和 decimal 时,您正在发送字符串。将类和参数命名为同一件事也不是一个好主意。我建议将 C# 中的类名更改为CartItem -
添加到上面的评论,使用你在
mpn, qty等中定义的变量var dataObject = JSON.stringify({ 'qty': qty, }); -
@Satpal 它们仍然是字符串,因为这就是
attr()返回的内容。 OP,使用data()获取属性值,或者通过parseInt()和parseFloat()运行相关的值 -
这条注释掉的行
//var c = new cartitem(qty, man, mpn, desc, price, sku);不起作用,因为类应该是cartItem,因为 Javascript 区分大小写。我在 dataObject 中为 qty 和 mpm 添加了整数和十进制值。您提供的代码对我有用,我在控制器方法中获取值,它们返回页面作为响应。我认为问题在于您在代码开头从 Html 标记属性中获取了一些空值,并且 sku 字符串为空。 -
我编辑了代码以考虑所有 cmets,但它仍然不起作用。
标签: javascript jquery ajax asp.net-mvc