Это вызов Ajax:
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.
Что я делаю не так?
3 ответа
ОК, теперь работает .... :-)
И это мое решение, надеюсь, оно поможет другим.
Это действие контроллера:
[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");
}
});
Кажется, есть много разных способов сделать это, на этот раз у меня это сработало, но я до сих пор не знаю, почему первый способ не сработал, хотелось бы, чтобы те, кто действительно это понимает, объяснили, почему это не сработало. не работает, а что творится под капотом.
Спасибо, ребята ... переходим к следующему.
Вы также можете сделать что-то вроде этого:
Создать новый класс:
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
}
Это тоже должно работать
Удалить ,
в 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)
},
Похожие вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.
selectedProductOptions
? Можете ли вы привести пример?