这是一个Java脚本函数,当用户点击添加到购物篮时调用,我正在测试我的Ajax调用,然后我输入所有逻辑来构建我的表单中的正确值(现在硬编码)。 )
function AddItem() {
var myproduct = { Id: 1, Price: 17, ProductName:"product name" }
var cartItem = { Quantity: 1, Product: myproduct };
$.ajax({
url: "/Cart/AddItem",
type: 'post',
data: cartItem,
success: function (data) {
if (data.IsSuccess) {
alert("test Hello Success");
}
alert("test HELLO Fail");
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown + "- Error");
}
});
}
问题是在测试这个Java脚本时,我的控制器操作中的强类型参数只设置了一些值, 我的控制器操作如下所示:
[HttpPost]
public JsonResult AddItem(CartItem cartItem)
{
cartItem.Cart = cartService.GetCartCurrent(this);
cartService.SaveCartItem(cartItem);
//bla bla bla
}
购物车项目定义如下:
[Serializable]
public class CartItem
{
[Key]
public int Id { get; set; }
public virtual Product Product { get; set; }
public virtual List<SelectedProductOption> SelectedProductOptions { get; set; }
public virtual Cart Cart { get; set; }
public int Quantity { get; set; }
}
所以当我设置一个断点时CartItem.Quaintity = 1但是CartItem.Product是非NULL但是Product.Id = 0和Product.Price的值是0。
为什么?
如何设置复杂模型的内部对象。
有什么想法吗?
答案 0 :(得分:1)
问题似乎是您的数据未正确反序列化。您可以使用JavaScriptSerializer
来解决此问题。
下面
var myproduct = { Id: 1, Price: 17, ProductName: "product name" };
var cartItem = { Quantity: 1, Product: myproduct };
$.ajax({
url: "/Home/Index",
type: 'post',
data: "formData=" + JSON.stringify(cartItem),
success: function (data) {
if (data.IsSuccess) {
alert("test Hello Success");
}
alert("test HELLO Fail");
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown + "- Error");
}
});
[HttpPost]
public JsonResult AddItem(string formData)
{
var js = new JavaScriptSerializer();
CartItem cartItem = js.Deserialize<CartItem>(formData);
cartItem.Cart = cartService.GetCartCurrent(this);
cartService.SaveCartItem(cartItem);
//bla bla bla
}