2013-03-29 2 views
7

Мне нужно передать двумерный массив методу страницы, написанный на код за веб-страницей в asp.net. У меня есть переменная objList как двухмерный массив. Я использовал следующий код для достижения этого без успеха, и метод страницы не вызывается.Передача массива в код из jquery ajax

JAVASCRIPT

function BindTable(objList) { 

    $.ajax(
    { 
      url: "CompCommonQues.aspx/SaveData", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      type: "POST", 
      data: { data: objList }, 
      success: function (data) { 
      //Success code here 
    }, 
    error: function() { } 
    }); 
    } 

КОД ПОЗАДИ .cs Файл

[WebMethod] 
public static string SaveData(string[,] data) 
{ 
    string[,] mystring = data; 
    return "saved"; 
} 

Существует метод, как JSON.stringify (objList), чтобы передать массив JSON в код позади, но не смог реализовать это. Простой вызов wihtout массив работает для меня, как

data: "{ 'data':'this is string' }", 

и в коде позади

[WebMethod] 
public static string SaveData(string data) 
{ 
    string mystring = data; 
    return "saved"; 
} 

Существует проблема при переходе data. Можете ли вы мне помочь, как передать его для массивов?

ответ

6

Попробуйте правильное обозначение JSON в JavaScript

var objList = new Array(); 
objList.push(new Array("a","b")); 
objList.push(new Array("a", "b")); 
objList.push(new Array("a", "b")); 

    $.ajax({ 
     type: "POST", 
     url: "copyproduct.aspx/SaveDate", 
     data: "{'data':'" + JSON.stringify(objList) + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d); 
     } 
    }); 

В коде позади, вы можете десериализации с JavaScriptSerializer (System.Web.Script.Serialization)

[WebMethod()] 
public static string SaveDate(string data) 
{ 
    JavaScriptSerializer json = new JavaScriptSerializer(); 
    List<string[]> mystring = json.Deserialize<List<string[]>>(data); 
    return "saved"; 
} 

мне пришлось десериализации в общий список массива строк, потому что вы не можете десериализовать строку (проверьте: http://forums.asp.net/t/1713640.aspx/1)

+0

Веб-метод не ударяет, когда я отлаживаю код. Какие изменения требуются в коде за функцией. –

+1

Вы передаете строку как: {данные: [["a", "b"], ["a", "b"], ["a", "b"]]}. Поэтому вам нужно изменить параметр из строки (,) на строку и использовать System.Web.Script.Serialization.JavaScriptSerializer для десериализации в строку (,). Я рассмотрю пример. – JurgenStillaert

+0

Я изменил свой код в соответствии с вашим предложением, создаются массивы, но код позади метода все еще не срабатывает. –

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