Я использую MVC 4 и пытаюсь получить Json от клиента, созданного Knockout.Js, назад к моему Action Controller. Json получает одобренное сообщение и изучает его в Fiddler, все кажется прекрасным, но когда JsonResults Action связывает его, у созданного объекта нет ICollection, который присутствовал в Json.JsonResult не подбирает ICollection в объекте, когда я отправляю сообщение из ajax
Мой клиент Ajax пост выглядит следующим образом:
$.ajax({
url: location.href,
type: 'POST',
data: ko.toJSON(this.Orders),
dataType: "json",
contentType: "application/json charset=utf-8",
success: function (data) {
alert(data.Message);
}
});
Это производит следующий JSon:
[{"Number":1,"Properties":{"Id":2,"Title":"#333"},"UnitCost":"20"}]
Моя структура ViewModel на стороне сервера так:
модель Заказать
public class VmOrder
{
public int Number
{
get;
set;
}
public ICollection<VmProperty> Properties
{
get;
set;
}
public decimal UnitCost
{
get;
set;
}
}
модель недвижимости
public class VmProperty
{
public int Id
{
get;
set;
}
public string Title
{
get;
set;
}
}
И, наконец, мой контроллер выглядит следующим образом:
[HttpPost]
public JsonResult Order(ICollection<VmOrder> Orders)
{
// further server-side validation, save to database, etc
return Json("Saved", "");
}
Хотя я получить номер и UnitCost коллекция свойства равно нулю, какие идеи?
'" Свойства ": {" Id ": 2," Title ":" # 333 "}' содержит только объект, а не массив. Версия массива будет выглядеть так: '' Properties ': [{"Id": 2, "Title": "# 333"}] '. Итак, на стороне C# вам нужны 'public VmProperty Properties { get; комплект; } 'вместо коллекции. – nemesv
Это сделало, спасибо. Я установил модель свойств как и наблюдаемый массив в нокаут, но по какой-то причине он не передал JSON в виде массива? – Fishbaum