2011-09-22 40 views
4

私は配列をc#webmethodに渡したいと思いますが、その良い例はありません。ご協力いただきありがとうございます。ここでjqueryの配列をajax経由で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コードWebMethod属性ではなく、ここで

$.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] 
    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メソッドでは、あなたがこのようにList<roleInfo>受け取ることができます。

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

} 

これを試してください、私に教えてください。上記のコードは何らかの方法でテストされていないのでエラーがあるかもしれませんが、これはきれいできれいなアプローチだと思います。

+0

をこれが動作しているようですが、とき、私はちょうどそれを明確にしたかったです私はjobRoleArray [0] .IndexやjobRoleArray [0]のようなことをします。RoleIDまたはjobRoleArray [0]。WebメソッドのRoleNameデータが表示されません。 – MdeVera

+0

ajax呼び出しが行われたときにデータがそこにあることを確認しましたか? –

4

私はこのような何かを実装する前に、Webメソッドに配列を渡しています。これがあなたの問題を解決するためのアイデアを得ることを願っています。私のjavascriptのコードは以下の通りです: - ページの背後にあるコード(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); 

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メソッドであり、配列を受け取るパラメータajaxからの呼び出しはオブジェクト型です。

これが役に立ちます。

編集: - あなたのWebメソッドによれば、あなたはブール型の値を期待しています。ここではAJAX呼び出しが、これはクリーンな方法を探しては、パラメータとして配列を送信すること、MdeVeraのように、もののためにこれを追加する

+0

あなたはwebmethodの詳細を完了しますか?私は全くデータを読むことができません。しかし、メソッドが呼び出され、私が提供したサンプルを試しました。ちょうどデータを取得していないようです。助けてくれてありがとう。 – MdeVera

+0

アガマンに感謝しますが、私はオブジェクトを逆シリアル化する必要がありますが、データをきれいにすることはできません。あなたのサンプルに従っています:string [] a = participantLists.ToString()。Split( '、');リスト subIds = a.Select(x => int.Parse(x))。ToList ();しかし、どのようにして各要素を個別に見ることができますか?助けてくれてありがとう。 – MdeVera

0

を助け、成功

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

希望する場合にそれを取得する方法。答えはイカルスの答えで見つけることができます。あなたは、配列を含むWebページを呼び出すしたい場合は、以下の方法を使用することができ、パラメータとして、

JSON.stringify(<your array cames here>) 

例えば:

"<URL>?<Parameter name>=" + JSON.stringify(<your array>) 
関連する問題