Я пытаюсь выполнить вызов JQuery AJAX для метода действия контроллера, который содержит сложный объект в качестве параметра.Я прочитал много блогов и попробовал несколько методов, извлеченных из них.Ключевым постом, на котором я построил свой код наилучшей попытки (ниже), является сообщение стека переполнения стека здесь .
Я хочу вызвать асинхронный пост, который вызывается, когда пользователь выходит из поля [не сообщение о сохранении формы - как показано в других примерах, которые я нашел].
Мое намерение заключается в следующем:
- Создание объекта на клиенте [не ViewModel, который предоставляет тип для View];
- Заполнить объект данными из нескольких полей в представлении;
- Преобразовать этот объект в JSON;
- Вызовите метод действия контроллера, используя метод jQuery.Ajax, передав объект JSON.
Результаты будут возвращены как результаты в формате JSON;и данные будут загружены в поля в представлении в зависимости от возвращаемых результатов.
Проблемы:
- Если метод действия связан с атрибутом HttpPost, метод действия контроллера имеет видне вызывается (даже если для типа вызова AJAX установлено значение «POST»).
- Если метод действия назначен с помощью HttpGet, значения свойств параметра равны нулю
- Метод ReadObject выдает ошибку: «Ожидается элемент« root »из пространства имен» ». Обнаружен« None »с пространством имен« name »«».
Надеюсь, кто-нибудь может помочь.Благодарю.Код ниже:
JS-файл клиента
var disputeKeyDataObj = {
"InvoiceNumber": "" + $.trim(this.value) + "",
"CustomerNumber": "" + $.trim($('#CustomerNumber').val()) + ""
};
var disputeKeyDataJSON = JSON.stringify(disputeHeadlineData);
$.ajax({
url: "/cnr/GetDataForInvoiceNumber",
type: "POST",
data: disputeKeyDataJSON,
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: EnrichedDisputeKeyData(result)
});
Фильтр действий и класс для типа, связанного с параметром метода действий
[DataContract]
public class DisputeKeyData
{
[DataMember(Name = "InvoiceNumber")]
public string InvoiceNumber { get; set; }
[DataMember(Name = "CustomerNumber")]
public string CustomerNumber { get; set; }
}
Метод действия на контроллере
//[HttpPost]
[ObjectFilter(Param = "disputeKeyData", RootType = typeof(DisputeKeyData))]
public ActionResult GetDataForInvoiceNumber(DisputeKeyData disputeKeyData)
{
//Blah!
//....
return Json(disputeKeyData, JsonRequestBehavior.AllowGet);
}