Я просмотрел несколько постов здесь со схожими проблемами и попробовал несколько альтернатив, предложенных здесь, но безуспешно.
Я пытаюсь сделать AJAX вызов POST от javascript к моему действию контроллера, разработанному в. NET CORE 2.1. Действие получает сложный объект в качестве аргумента.
Подробности указаны ниже.
AJAX ВЫЗОВ:
var scanRequest = {
GUID: guid,
UserEmail: email,
ApplicationURL: appURL,
ApplicationName: appName,
SelectedAppTimezone: appTimeZone,
ScheduledScanTime: schScnTime,
SelectedLocation: location,
SelectedPrimaryContactTimezone: appPriTimeZone,
AdditionalContacts: addContacts,
APMID: apmID,
OwningTerritory: ownTerritory,
SelectedLineOfService: los,
ScanAuthenticationRequired: scnAuthReq,
ScanAuthenticationDetails: scanAuthDetails
};
var source = JSON.stringify(scanRequest);
var actionURL = "/ScanRequest/NewScanRequest";
$.ajax({
url: actionURL,
contentType: 'application/json; charset=utf-8',
type: 'POST',
data: { 'request': source },
success: function (response) {
$('#modalContent').modal('show');
$("#modalbodyContent").html(response);
},
error: function (response) {
alert(response);
}
});
Действие контроллера
[HttpPost]
public ActionResult NewScanRequest( ScanRequest request)
{
.....
}
Сложный класс
public class ScanRequest
{
public string GUID { get; set; }
public string UserEmail { get; set; }
public string ApplicationURL { get; set; }
public string ApplicationName { get; set; }
public string SelectedAppTimezone { get; set; }
[NotMapped]
public IEnumerable<SelectListItem> AppTimezones { get; set; }
public DateTime ScheduledScanTime { get; set; }
public string SelectedLocation { get; set; }
[NotMapped]
public IEnumerable<SelectListItem> Locations { get; set; }
public string SelectedPrimaryContactTimezone { get; set; }
public string AdditionalContacts { get; set; }
public string APMID { get; set; }
public string OwningTerritory { get; set; }
[NotMapped]
public IEnumerable<SelectListItem> LineOfServices { get; set; }
public string SelectedLineOfService { get; set; }
public bool ScanAuthenticationRequired { get; set; }
public string ScanAuthenticationDetails { get; set; }
}
После отладки JS я выяснил, что объект становится строковым, даже параметр data запрос AJAX также содержит необходимые данные. Когда запрос достигает действия контроллера, объект появляется, но его внутренние свойства либо равны нулю, либо имеют значения по умолчанию и не содержат значений, отправленных через форму. Я попытался использовать атрибут [FromBody] , но тогда сам объект становится нулевым, когда он достигает действия контроллера. Я приложил скриншоты заголовков запросов, а также полезных данных запроса.
Изображение: параметр в действии (без [FromBody]) ; Изображение: параметр в действии (с [FromBody]) ; Изображение: заголовок запроса ; Изображение: Запрос полезной нагрузки Если кто-то может помочь мне в этом, это будет высоко оценено.
Заранее спасибо.