2014-09-20 4 views
1

У меня есть функция JavaScript, которая выглядит следующим образом:Невозможно отправить данные JSON в контроллер MVC

function exportToExcel() { 
    $.ajax({ 
     url: "/eBird/ExportToExcel", 
     data: jsonSightingData, 
     type: 'POST', 
     contentType: 'application/json' 
    }); 
} 

Мой контроллер MVC выглядит следующим образом:

public ActionResult ExportToExcel(List<Entities.MyClass> data) 
{ 
    try 
    { 
     ... 
    } 
    catch (System.Exception exception) 
    { 
     ... 
    } 

MyClass Defintion является:

public class MyClass 
    { 
     public string comName { get; set; } 
     public int howMany { get; set; } 
     public double lat { get; set; } 
     public double lng { get; set; } 
     public string locID { get; set; } 
     public string locName { get; set; } 
     public bool locationPrivate { get; set; } 
     public string obsDt { get; set; } 
     public bool obsReviewed { get; set; } 
     public bool obsValid { get; set; } 
     public string sciName { get; set; } 
    } 

Класс соответствует данным JSON, поступающим точно. Проблема в том, что когда мой метод контроллера вызывается, «данные» всегда равны NULL. Я понял, что связующее устройство MVC автоматически привязывает данные JSON к моему списку MyClass. Но он, похоже, не работает.

Пример JSON выглядит следующим образом:

[{"comName":"Great Black-backed Gull","lat":42.4613266,"lng":-76.5059255,"locID":"L99381","locName":"Stewart Park","locationPrivate":false,"obsDt":"2014-09-19 12:40","obsReviewed":false,"obsValid":true,"sciName":"Larus marinus"}] 
+0

Можете ли вы показать образец JSON, что вы 'POST'ing? –

+0

Когда вы смотрите на «ModelState» в действии контроллера, вы видите какие-либо ошибки? –

+0

@AndrewWhitaker - ModelState.IsValue = true –

ответ

0

Использование общего объекта (как JContainer) "захватывать" поступающие данные. или даже Object, если вы не уверены, что получите. Затем посмотрите, что у вас внутри. Я использую внешний десериализатор для преобразования json в класс. (С использованием .ToString(), чтобы сделать его доступным для чтения к сериализатору)

(попробуйте Json.NET)

Также - убедитесь, что JSON не преобразуется в Unicode. У меня была проблема с этим.

другое примечание - думаю тип контента должен быть прикладной/json. Прочтите следующее: SO about json content type

-1

Запуск Fiddler и захват Json отправлен на контроллер. Контроллер ожидает список, но похоже, что вы отправляете один объект. Вещь, поступающая как нуль, случается со многими из нас. Я попробую и запустит то, что у вас есть. Можете ли вы также возиться с контроллером и придать ему только MyClass?

Смежные вопросы