Передать массив объектов Javascript в PageMethod - PullRequest
3 голосов
/ 16 мая 2009

Вот ситуация: я хотел бы перебрать таблицу с элементами управления вводом, собрать значения и затем отправить их в ASP.Net PageMethod для сохранения данных в базе данных. У меня есть вся коллекция, но я получаю сообщение об ошибке, что строка не может быть преобразована в словарь.

Таким образом, я получаю нечто подобное, передаваемое методу с подписью ниже

[
{ 'id': '383840923', 'name': 'fred', 'car':'honda' },
{ 'id': '243', 'name': 'joe', 'car':'honda' },
{ 'id': '4323423', 'name': 'paul', 'car':'honda' },
{ 'id': '38384234230923', 'name': 'ted', 'car':'honda' },
]

public static bool SaveData(Dictionary<string, object>[] items) {...}

Я знаю, что я могу передавать объекты целого класса взад и вперед, если они должным образом объявлены, и ASP.Net будет обрабатывать преобразования для меня, но мне не нужен весь передаваемый класс, только пара свойств.

Редактировать: я использую Jquery для отправки сообщения обратно на сервер.

Что я здесь не так делаю?

Ответы [ 3 ]

2 голосов
/ 16 мая 2009

ASP.NET AJAX автоматически десериализует это для вас, если вы используете DTO . Нечто подобное на стороне сервера будет соответствовать массиву JSON, который вы отправляете:

public class PeopleAndCarsDTO
{
  public int id { get; set; }
  public string name { get; set; }
  public string car { get; set; }
}

public static bool SaveData(List<PeopleAndCarsDTO> items) {...}
1 голос
/ 16 мая 2009

Я понял, в чем проблема. Я обернул массив в кавычки, прежде чем отправить его как часть вызова $ .ajax, чтобы он обрабатывался как строка вместо массива.

            $.ajax({
                type: "POST",
                url: "<%= Response.ApplyAppPathModifier(Request.Path) %>/UpdateAcademicItems",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: "{'items': **'**" + $.toJSON(items) + "**'**}",
                success: function(data) {
                    if(false != data.d) {
                        alert('we did it');
                    } else {
                        alert ('flop');
                    }
                },
                error: function() {
                    alert('Failed to save Program Items');
                }
            }); 
0 голосов
/ 16 мая 2009

@ Джаред переданный объект является массивом JSON. Вы можете использовать json sharp для обработки на стороне сервера. Здесь - хороший пост о преобразовании массива json в C #.

...