2013-03-11 6 views
0

Я пытаюсь передать список OrderLines в действие контроллера асинхронного с помощью Javascript:MVC 4: пройти сложный объект для асинхронного действия контроллера

var model = "<some JSON string>"; 
$.ajax({ type: "POST", 
    url: "/MyController/MyAction", 
    datatype: "json", 
    data: { 'orderLines': model}, 
    success: function(msg) { 
    ... 
    } 
}); 

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

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

public ActionResult AsyncUpdateOrderline(List<OrderLine> orderLines) 
{ 
    ... 
} 

Как правильно пройти сложный объект действие контроллера асинхронного?

Спасибо, Nils

ответ

6

Вы должны установить заголовок запроса Content-Type, а также использовать метод JSON.stringify для передачи данных на контроллер:

var model = [ 
    { quantity: 1, name: 'some name 1' }, 
    { quantity: 2, name: 'some name 2' } 
]; 

$.ajax({ 
    url: '/MyController/MyAction', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ orderLines: model }), 
    success: function(msg) { 
     ... 
    } 
}); 

Обратите внимание, как эта модель не должна быть JSON, но объект массива javascript, где каждый элемент отражает структуру вашей модели OrderLine.

+0

Спасибо, сейчас почти работает. Единственное, что не работает: у меня есть объект UnitPrice в строке заказа. Все поля этого объекта десериализованы нормально, за исключением поля «Сумма». Это значение 0 в действии контроллера, тогда как оно задано десятичным значением в строке JSON. Есть идеи? – ngruson

+0

Попробуйте установить его как строку в свой javascript-объект. Например: '{unitPrice: '12 .34 '}' вместо '{unitPrice: 12.34}'. Если вас интересует информация о том, почему это необходимо, вы можете посмотреть следующий ответ, где я объяснил это: http://stackoverflow.com/a/8968207/29407 –

+0

Строка JSON генерируется JavaScriptSerializer(). Сериализация (OBJ). Есть ли какой-либо умный способ повлиять на то, как JavaScriptSerializer обрабатывает десятичные значения? Если нет, я должен сделать более грязное исправление. – ngruson

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