#c# #ajax #asp.net-mvc-5
#c# #ajax #asp.net-mvc-5
Вопрос:
Ajax:
$.ajax({
async: true,
type: 'Post',
contentType: 'application/json',
dataType: 'json',
traditional: true,
processData: false,
data: JSON.stringify(myData),
url: '/Shopping/Order',
success: function (response) {
console.log("response.sussces: " response.success);
console.log("response.message: " response.message);
console.log("response.data: " response.data);
},
error: function (response) {
console.log(response);
}
});
Я пытаюсь выполнить итерацию списка элементов, который поставляется в формате json как
{
"ItemList": [
{
"id": 3,
"name": "Item 3",
"desc": "Lorem Ipsum is simply dummy text",
"price": 361.05,
"image": "../images/no_image.png",
"count": 1
},
{
...
},
...
]
}
мой контроллер:
[HttpPost]
public JsonResult Order([FromBody] ItemList list)
{
var response = new
{
Success = true,
Message = "Item Added Succesfully",
Data = list.Items.Count() // result: System.ArgumentNullException: value can't be null
};
var jsonResult = Json(response);
return jsonResu<
}
когда я назначаю список.toString() для данных.
Значение данных становится ( демонстрация.Контроллеры.Список элементов ).
С другой стороны, я получаю входящие данные из ajax, когда объявляю параметр как тип объекта.
Контроллер после модификации:
[HttpPost]
public JsonResult Order([FromBody] Object list)
{
var response = new
{
Success = true,
Message = "Item Added Succesfully",
Data = list.ToString()
};
var jsonResult = Json(response);
return jsonResu<
}
Любая помощь будет оценена.
Отредактировано: Классы элементов и списков элементов
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
public double Price { get; set; }
public string Image { get; set; }
public int Count { get; set; }
}
public class ItemList
{
public List<Item> Items { get; set; }
}
Список строк Json: var myData = {ItemList: JSON.parse(sessionStorage.getItem('shoppingCart'))};
для создания этого:
«ItemList»: [ { «id»: 3, «name»: «Item 3», «desc»: «Lorem Ipsum — это просто фиктивный текст», «price»: 361.05, «image»: «../images/no_image.png», «count»: 1 }, { … }, … ] }
Комментарии:
1. Должен ли ваш Json иметь
{
перед собой свойствоItemList
, упомянутое в, для создания этого:2. Спасибо за примечание, я не заметил, что фигурные скобки. 🙂
Ответ №1:
ItemList
является свойством вашего объекта JSON. Итак, создайте новый класс, как показано ниже, и он должен иметь свойство ItemList
as .
public class OrderRequest
{
public ItemList ItemList {get; set; }
}
И измените подпись действия на
[HttpPost]
public JsonResult Order([FromBody]OrderRequest orderRequest)
и для доступа к счетчику
Data = orderRequest.ItemList.Items.Count()
Комментарии:
1. та же проблема, я получил «System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта»
2. Можете ли вы опубликовать структуру классов
ItemList
в своем вопросе?3. Извините, я забыл опубликовать вместе с вопросом, я только что отредактировал.