it-swarm.com.ru

Возврат данных Json для вызова Ajax

У меня есть метод в MVC, который я публикую в нем, и мне нужно вернуть некоторые данные обратно в процесс. Это мой метод MVC, который я публикую и возвращаю Value - это данные json.

[HttpPost]
public JsonResult GetCalculateAmortizationSchedule()
{
    var data = ...
    var httpClient = new HttpClient();
    var response = httpClient.PostAsJsonAsync("http://localhost:62815/v1/APR/CalculateAmortizationSchedule", data).Result;
    var returnValue = response.Content.ReadAsAsync<Dictionary<int, AmItem>>().Result;
    return Json(returnValue);
}

Это мой AJax-вызов, который успешно запускает метод MVC. 

$('#MyForm').submit(function (e) {
    debugger;
    $.ajax({
        url: "/home/GetCalculateAmortizationSchedule",
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",                
        success: function (result) {
            alert("success");
        },
        error: function (result) {
            alert("error");
        }
    });
    e.preventDefault();
});

Моя проблема в том, как отловить возвращаемое значение из метода? Когда я запускаю это после return Json (returnValue), значение не возвращается методу Ajax, и вместо предупреждения об успехе я вижу сообщение об ошибке. 

2
nik

Попробуй это:

     success: function (result) {alert(JSON.stringify(result)); }

Из-за ошибки, которую вы разместили в комментариях ниже, кажется, словарь не сериализуем. Попробуйте установить AllowGet, как указано в других ответах. Если не работает, вам нужно будет преобразовать словарь в какой-либо другой объект, который можно сериализировать. Или вы можете следовать этому, чтобы сериализовать словарь в JSON в вашем контроллере.

Как мне преобразовать словарь в строку JSON в C #?

2
Allen King

Вы должны добавить JsonBehavious, если вы не получаете значения.

return Json (returnValue, JsonRequestBehavior.AllowGet);

1
Rahul

Попробуйте этот кусок кода:

 return Json(returnValues, JsonRequestBehavior.AllowGet);
1
Abhay