2009-05-16 3 views
3

Вот что мне нужно: итерации через таблицу с элементами управления вводами, сбор значений, а затем отправку их в ASP.Net PageMethod для сохранения данных в базе данных. У меня есть сборник, который все понял, но я получаю сообщение об ошибке, что строка не может быть преобразована в словарь.Pass Массив объектов Javascript для 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, чтобы сделать сообщение обратно на сервер.

Что я здесь делаю неправильно?

+0

[PageMethods против UpdatePanels] (http://izlooite.blogspot.com/2010/06/pagemethods-vs-updatepanels.html) –

ответ

1

Я выяснил, в чем проблема. Я обертывал массив в кавычки, прежде чем отправлять его как часть вызова $ .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

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

2

ASP.NET AJAX will automatically deserialize that for you if you use a 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) {...} 
+0

Да, я думаю, что я прочитал большую часть вашего блога более чем один раз Cегодня. Большая помощь. Это то, чего я пытался избежать, но я понял, в чем проблема. Я обматывал массив в кавычках до того, как он был отправлен, поэтому он обрабатывался как строка вместо массива. Поэтому я могу уйти со своим настраиваемым массивом. – Jared

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