2016-05-02 2 views
0

В моей ASP.MVC У меня есть следующие модели:Настройка JQuery JSON сериализации

public class MySubModel 
{ 
    public int Id { get; set; } 
} 

public class MyModel 
{ 
    public List<MySubModel> Items { get; set; } 
} 

На стороне клиента я использую jQuery.ajax() для отправки данных на сервер с помощью запроса POST. Моя проблема в том, что каждый идентификатор в списке имеет значение по умолчанию (0).

После отладки через DefaultModelBinder я понял, что ASP.MVC ожидать ключей, как это:

Items[0].Id 

в то время как JQuery отправить

Items[0][Id] 

Есть ли способ, чтобы изменить это поведение JQuery?

P.S. Похоже, что я могу использовать JSON.stringify() на клиенте и некоторый парсер JSON на сервере, но это взломать для меня. Есть ли способ лучше?

+0

показать код вашей стороне клиента –

ответ

3

P.S. Похоже, что я могу использовать JSON.stringify() на клиенте, а на сервере - парсер JSON , но это взломать для меня. Есть ли лучший способ ?

JSON.stringify достаточно, вам не нужен какой-либо анализатор JSON на сервере, который уже обрабатывается базовой структурой для вас.

Пример:

var model = { items: [] }; 
// now add some elements to the items array 
model.items.push({ id: 1 }); 
model.items.push({ id: 2 }); 
model.items.push({ id: 3 }); 
... 

$.ajax({ 
    url: 'your controller action endpoint comes here', 
    method: 'post', 
    contentType: 'application/json', 
    data: JSON.stringify(model), 
    success: function(result) { 
     // do something with the results here 
    } 
}); 

, который будет успешно отправить к следующему действию:

[HttpPost] 
public ActionResult SomeAction(MyModel model) 
{ 
    ... use your model here directly without any JSON parsing 
} 

2 важных параметров вашего запроса AJAX является следующим:

contentType: 'application/json', 
data: JSON.stringify(model) 

и из конечно, переменная javascript model должна отражать вид вашей стороны сервера mo del, как показано здесь (он должен иметь свойство массива items элементов, имеющих свойство id).