2011-09-22 26 views
4

我想傳遞一個數組到一個c#webmethod但沒有一個很好的例子。感謝您的幫助。通過ajax傳遞數組jQuery中的一個c#webmethod

這是我到目前爲止有:

我的數組:

$(".jobRole").each(function (index) { 

    var jobRoleIndex = index; 
    var jobRoleID = $(this).attr('id'); 
    var jobRoleName = $(this).text(); 

    var roleInfo = { 
     "roleIndex": jobRoleIndex, 
     "roleID": jobRoleID, 
     "roleName": jobRoleName 
    }; 

    queryStr = { "roleInfo": roleInfo }; 
    jobRoleArray.push(queryStr); 

}); 

我的Ajax代碼

$.ajax({ 
      type: "POST", 
      url: "WebPage.aspx/save_Role", 
      data: jobRoleArray, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       alert("successfully posted data"); 
      }, 
      error: function (data) { 
       alert("failed posted data"); 
       alert(postData); 
      } 

     }); 

上的WebMethod不知道,但這裏是我在想什麼:

[WebMethod] 
    public static bool save_Role(String jobRoleArray[]) 

回答

8

你會通過數組:

[ 
    "roleInfo": { 
       "roleIndex": jobRoleIndex, 
       "roleID": jobRoleID, 
       "roleName": jobRoleName 
    }, 
    "roleInfo": { 
       "roleIndex": jobRoleIndex, 
       "roleID": jobRoleID, 
       "roleName": jobRoleName 
    }, ... 
] 

,在我看來,如果您有一個是結構相匹配的類,這樣它會更容易:

public class roleInfo 
{ 
    public int roleIndex{get;set;}  
    public int roleID{get;set;} 
    public string roleName{get;set;} 
} 

所以,當你調用您的Web方法jQuery的,你可以做這樣的:

$.ajax({ 
      type: "POST", 
      url: "WebPage.aspx/save_Role", 
      data: "{'jobRoleArray':"+JSON.stringify(jobRoleArray)+"}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       alert("successfully posted data"); 
      }, 
      error: function (data) { 
       alert("failed posted data"); 
       alert(postData); 
      } 

     }); 

並在Web方法,你可以通過這種方式獲得

[WebMethod] 
public static bool save_Role(List<roleInfo> jobRoleArray) 
{ 

} 

如果您嘗試此操作,請告訴我。以上代碼沒有以任何方式進行測試,因此可能會出現錯誤,但我認爲這是一種很好且非常乾淨的方法。

+0

這似乎是工作,但是當我做了一些像jobRoleArray [0] .Index或jobRoleArray [0]。Webmethod中的RoleID或jobRoleArray [0] .RoleName我看不到任何數據。 – MdeVera

+0

您是否在ajax調用時檢查了數據? –

4

我已經實現了這樣的事情之前,它正在傳遞一個數組到web方法。希望這會爲你解決問題提供一些想法。我的JavaScript代碼如下: -

function PostAccountLists() { 

     var accountLists = new Array(); 

     $("#participantLists input[id*='chkPresents']:checked").each(function() { 
      accountLists.push($(this).val()); 
     }); 

     var instanceId = $('#<%= hfInstanceId.ClientID %>').val(); 

     $.ajax({ 
      type: "POST", 
      url: "/_layouts/TrainingAdministration/SubscriberLists.aspx/SignOff", 
      data: "{'participantLists': '" + accountLists + "', insId : '" + instanceId + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       AjaxSucceeded(msg); 
      }, 
      error: AjaxFailed 
     }); 
    } 

在代碼隱藏頁(Web方法)

[WebMethod] 
    public static void SignOff(object participantLists, string insId) 
    { 
     //subscription row id's 
     string[] a = participantLists.ToString().Split(','); 
     List<int> subIds = a.Select(x => int.Parse(x)).ToList<int>(); 

     int instanceId = Convert.ToInt32(insId); 

這裏需要注意的是在Web方法,將接收陣列參數的事情來自ajax調用的是類型對象。

希望這會有所幫助。

編輯: - 根據您的網絡方法,您期待值類型布爾值。這裏怎麼把它當Ajax調用是成功

function AjaxSucceeded(result) { 
     var res = result.d; 
     if (res != null && res === true) { 
      alert("succesfully posted data"); 
     } 
    } 

希望這有助於

+0

你會有更多的webmethod完成?我似乎無法讀取任何數據。但是,該方法被調用,我已經嘗試過您提供的示例。似乎無法獲取數據。謝謝你的幫助。 – MdeVera

+0

謝謝agamand,但我在一個點,我需要反序列化我的對象,但似乎無法將數據清理乾淨。我跟隨你的示例:string [] a = participantLists.ToString()。Split(','); List subIds = a.Select(x => int.Parse(x))。ToList ();但是,你如何分別看到每個元素?非常感謝您的幫助。 – MdeVera

0

添加這對於那些像MdeVera,即尋找清潔的方式發送數組作爲參數。你可以在伊卡洛斯答案中找到答案。我只是想弄清楚:

JSON.stringify(<your array cames here>) 

例如,如果你想調用一個網頁與數組作爲參數,您可以用下面的辦法:

"<URL>?<Parameter name>=" + JSON.stringify(<your array>)