Как я могу отправить массив объектов из JS на сервер? - PullRequest
1 голос
/ 22 июня 2011

Мой класс

[Serializable]
    public class VSpecialQualifiers
    {
        public VCD LivingStatus { get; set; }
        public VCD Relationship { get; set; }
        public string OnSetAge { get; set; }
    }

Моя функция js

 $.ajax({
                url: url,
                type: 'POST',
                datatype: 'json',
                data: {
                   'arr' : self.specialQualifiers
                }
          });

Мой serverMethod

[HttpPost]
        public JSONResult SaveProblem(object[] arr)
        {
          //i cant't cast to target type
        }

Как я могу передать массив объектов из js на сервер?

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Вот кое-что, что работает для меня (для C # MVC на заднем конце).

... в js:

var viewModel = new Object();
viewModel.Items = items; // items is a js array of objects
$.ajax({
    data: JSON.stringify(viewModel),
    type: "POST",
    contentType: 'application/json; charset=utf-8',
    cache: false,
    url: 'CONTROLLERNAME/ACTIONNAME', // replace as necessary here
    success: function (data) {
       // handle the return value, if any, here
    }
});

... в контроллере, подписьвот все, что имеет значение:

[HttpPost]
public ActionResult ACTIONNAME(WorksheetVM inputModel) {

... и это связанное определение ViewModel, которое работает там, где WorksheetItemVM является DTO viewmodel, который содержит список полей для каждого из передаваемых объектов Js:

public class WorksheetVM {
    public WorksheetItemVM[] Items { get; set; }
}
2 голосов
/ 22 июня 2011

Не то, чтобы это имело значение, но похоже, что вы используете jQuery, о котором следует упомянуть. Современные браузеры имеют JSON.stringify для преобразования массива JavaScript в строку JSON, которую вы можете передать на сервер. В старых браузерах этого нет, поэтому вам нужно включить библиотеку JSON, например:

http://www.json.org/js.html

Тогда одна и та же функция будет работать во всех браузерах.

После включения передачи данных:

data: JSON.stringify(self.specialQualifiers);

Обратите внимание, что я понятия не имею, что такое self.specialQualifiers, но оно должно быть преобразовано в массив. Вы должны сделать console.log в Firefox Firebug или в веб-инспекторе Chrome / Safari, чтобы убедиться, что это действительно реальная переменная.

На вашей стороне .net вам нужно ожидать строку, а затем библиотеку .net преобразовать эту строку в массив. Вы не можете передавать нативные объекты через HTTP, только строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...