#c# #jquery #list #xmlhttprequest #webapi
#c# #jquery #Список #xmlhttprequest #webapi
Вопрос:
Я использую XMLHttpRequest для отправки информации, и отправляемая мной информация включает класс, в котором одним из свойств является список. Проблема в том, что он отправляет всю информацию, но не отправляет нужный список.
Класс C#
public class AddProductRequest
{
public decimal GroupId { get; set; }
public decimal BrandId { get; set; }
public List<AdvancedDescription> AdvancedDescriptions { get; set; }
}
public class AdvancedDescription
{
public string Title { get; set; }
public string Description { get; set; }
}
Метод WebAPI
[Route("AdminApiAddProduct")]
[HttpPost]
public ResponseBody AdminApiAddProduct(AddProductRequest request)
{
if ((request.AdvancedDescriptions ?? new List<AdvancedDescription>()).Count > 0)
{
//Problem Array Count is 0
}
var groupId = request.GroupId; //is 12
var brandId = request.BrandId; //is 13
}
Jquery
$('body').on('click','#bSubmit',function(event) {
event.preventDefault();
var attributes =
[
{Title : 'test' , Description: 'test'} ,
{Title: 'test2' , Description : 'test2'}
];
const formData = new FormData();
formData.append('request.GroupId', 12);
formData.append('request.BrandId', 13);
formData.append('request.AdvancedDescriptions' , attributes);
var xmlHttpRequest = new XMLHttpRequest();
if (!window.XMLHttpRequest) {
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttpRequest.open("POST",
'@Url.Action("AdminApiAddProduct", "CallApi", new {area = "AdminArea"})',
true);
xmlHttpRequest.onloadend = function() {
var response = JSON.parse(xmlHttpRequest.responseText);
}
xmlHttpRequest.send(formData);
});
Общая проблема заключается в том, что расширенный список описаний не отправляется на сервер
Ответ №1:
Поскольку вы используете jQuery, вы можете использовать $.ajax
, создать объект JS и сериализовать его перед отправкой:
$('body').on('click','#bSubmit',function(event) {
event.preventDefault();
var attributes = [
{Title: 'test', Description: 'test'} ,
{Title: 'test2', Description : 'test2'}
];
const data = {
GroupId: 12,
BrandId: 13,
AdvancedDescriptions: attributes
};
$.ajax({
url: '@Url.Action("AdminApiAddProduct", "CallApi", new {area = "AdminArea"})',
type: 'POST',
data: JSON.stringify(data),
datatype: 'json',
})
.done(function (data) {
successFunction(data);
})
.fail(function (jqXHR, textStatus, errorThrown) {
serrorFunction();
});
});
Комментарии:
1. Я обновил анализатор, дайте мне знать, если он не работает.
2. не сработало, и он по-прежнему не отправляет список.
3. Хорошо, попробуйте использовать объект JavaScript, а не FormData, и сериализуйте весь объект перед отправкой. Опустите «запрос». литерал в ключах. Просто используйте обычный объект JS и сериализуйте его.
4. Вы можете привести пример с теми же данными