Это функция Java Script, которая вызывается, когда пользователь нажимает кнопку «Добавить в корзину». Я проверяю свой вызов 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.
Почему??
Как вы устанавливаете внутренний объект сложной модели.
Любые идеи?