这是Ajax Call:
var selectedProductOptions = new Array();
$(".optionSelectionBox").each(function () {
selectedProductOptions.push($(this).val());
});
$.ajax({
url: "/Cart/AddItem",
type: 'post',
data: JSON.stringify({
productId : @Html.ValueFor(m => m.Product.Id),
selectedOptions : selectedProductOptions,
}),
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 productId, List<string> selectedOptions)
{
//Code here
}
当我在动作上设置一个断点时,它会被命中,这就是我想要的但是...... productId和selectedOptions都是NULL。
我做错了什么?
答案 0 :(得分:1)
删除,
selectedOptions : selectedProductOptions,
data: JSON.stringify({
productId : @Html.ValueFor(m => m.Product.Id),
selectedOptions : selectedProductOptions
}),
修改强>
试试这个
data: {
productId: @Html.ValueFor(m = > m.Product.Id),
selectedOptions: JSON.stringify(selectedProductOptions)
},
答案 1 :(得分:1)
你也可以做这样的事情:
创建新类:
public class AddItemModel
{
public List<string> selectedOptions { get; set; }
public string productId { get; set; }
}
并修改您的代码:
public JsonResult AddItem(AddItemModel aim)
和ajax电话:
data: JSON.stringify({
aim: {
productId : @Html.ValueFor(m => m.Product.Id),
selectedOptions : selectedProductOptions
}
这也应该有用
答案 2 :(得分:0)
确定它正在工作....: - )
这是我的解决方案,希望它能帮助别人。
这是控制器动作:
[HttpPost]
public JsonResult AddItem(string formData)
{
var js = new JavaScriptSerializer();
AddItemModel addItemModel = js.Deserialize<AddItemModel>(formData);
//Other Code here
return new JsonResult();
}
public class AddItemModel
{
public List<string> selectedOptions { get; set; }
public string productId { get; set; }
}
这是Ajax调用:
$.ajax({
url: "/Cart/AddItem",
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");
}
});
这样做似乎有很多不同的方法,这次我得到了这个工作,但我仍然不知道为什么第一种方式不起作用,会喜欢一些真正了解这一点的人解释为什么它不起作用,以及在幕后发生了什么。
谢谢你们......继续下一个。