This is a Java Script function that is called when a user clicks add to basket, I am testing out my Ajax call before I put in all my logic to build the correct values form my form, (so hard coded for now.)
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");
}
});
}
The problem is when testing this Java Script my strongly typed parameter inside my controller action only has some of the values set, My controller action looks like this:
[HttpPost]
public JsonResult AddItem(CartItem cartItem)
{
cartItem.Cart = cartService.GetCartCurrent(this);
cartService.SaveCartItem(cartItem);
//bla bla bla
}
The Cart Item definition looks like this:
[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; }
}
So when I set a break-point CartItem.Quaintity = 1 but CartItem.Product is NOT NULL but the values for Product.Id = 0 and Product.Price is 0.
Why??
How do you set the inner object of the complex model.
Any ideas?
The problem seems to that your data is not being deserialized correctly. You can use JavaScriptSerializer
to solve this.
Here
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
}
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments