2017-02-08 6 views
1

サーバー側の文字列から配列を取得しようとしていますが、待機中のIDがNULLになっています。上記のソースコードに関するアドバイスをお願いします。私はCompareReturnAllResults(.....)の範囲でそれらを扱う方法がわかりません。AJAX呼び出しで配列を送信する

function compareFilesResult(whlIDs) { 
    var result = 0; 
    $.ajax({ 
     url: '/ajax/CompareReturnAllResults', 
     contentType: "application/json; charset=utf-8", 
     type: 'GET', 
     dataType: "json", 
     data: { ID: whlIDs }, 
     success: function (data) { 
      if (data != null) { 
       return result; 
      } 
     }, 
     error: function (data) { 
      return result; 
     }, 
     fail: function (data) { 
      return result; 
     } 
    }); 
} 





    [HttpGet] 
    public ActionResult CompareReturnAllResults(string [] _IDs) 
    { 
     List<Common.Utilities.CompareFilesResult> result = new List<Common.Utilities.CompareFilesResult>(); 
     foreach (var id in _IDs) 
     { 
      var whl = WHLConfig.Caches.WHLsCache.Where(w => w.ID == id).First(); 
      var diffResponse = WhlObjects.WHLMethods.CompareConfigs(whl); 
      Common.Utilities.CompareFilesResult temp = new Common.Utilities.CompareFilesResult(whl.ID, diffResponse.CountDeleted, diffResponse.CountInserted); 
      result.Add(temp); 
     } 
     string diff = string.Empty; 
     if (result != null && result.Count != 0) 
     { 
      return Json(result, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(string.Empty, JsonRequestBehavior.AllowGet); 
     } 
    } 
+0

あなたは 'string [] _IDs'を宣言していますので、ajaxコールで同じものを使用してください。 'data:{_IDs:whlIDs}、 ' –

答えて

0

あなたがcontentType: "application/json; charset=utf-8"を使用している場合、それは我々がjsonオブジェクトを送信サーバに通知します。このためにはJSON.stringify()メソッドを使用する必要があります。

contentTypeは送信するデータのタイプですので、application/json;デフォルトはapplication/x-www-form-urlencoded; charset=UTF-8です。

JSON.stringify()は、javascriptオブジェクトをjsonテキストに変えて文字列に格納します。

$.ajax({ 
    url: '/ajax/CompareReturnAllResults', 
    contentType: "application/json; charset=utf-8", 
    type: 'POST', 
    dataType: "json", 
    data: JSON.stringify({ _IDs: whlIDs }), 
     ^^^^^^^^^^^^^^^^ 
    success: function (data) { 
     if (data != null) { 
      return result; 
     } 
    }, 
    error: function (data) { 
     return result; 
    }, 
    fail: function (data) { 
     return result; 
    } 
}); 

C#

[HttpPost] 
public ActionResult CompareReturnAllResults(List<string> _IDs) 
{ 
    //code 
} 

別の方法は、traditional:trueプロパティを使用することです。

$.ajax({ 
    url: '/ajax/CompareReturnAllResults', 
    type: 'GET', 
    dataType: "json", 
    data: { _IDs: whlIDs }, 
    traditional:true, 
    success: function (data) { 
     if (data != null) { 
      return result; 
     } 
    }, 
    error: function (data) { 
     return result; 
    }, 
    fail: function (data) { 
     return result; 
    } 
}); 

C#

public ActionResult CompareReturnAllResults(List<string> _IDs) 
{ 
    //code 
} 
+0

私はしようとしましたが、同じです、IDは再びNULLとして来ています。 CompareReturnAllResults(string [] _IDs) – Sarah

+0

配列を取得するために 'string IDs'を使い、' JavascriptSerializer'を使ってみてください。 –

+0

もう一つの方法は 'List IDs'を使うことです。 –

1

私は真の伝統的な設定する必要がありますように見えると思います。

スクリプト: -

jQuery.ajaxSettings.traditional = true 

まずワン: -

$.ajax({ 
     url: 'controller/GetArray', 
     data: JSON.stringify({ 
      employee: arrEmployee 
     }), 
     success: function(data) { /* Whatever */ } 
    }); 


****Second One:-**** 

$.ajax({ 
    type: "POST", 
    url: "controller/GetArray", 
    data: {employee: arrEmployee}, 
    success: function (data) { /* Whatever */ } 
}); 

モデル: - コントローラで

public class Employee 
{ 
    public int Id; 
    public string Name; 
} 

: -

public ActionResult GetArray(Employee[] employee) 
{ 
    // code here what u do 
} 

希望の作品!

+0

残念ながらうまくいきませんでしたが、ブラウザ内のIDは文字列配列として返されますが、サーバー側ではリスト内のNULLになります。 – Sarah

+0

あなたはモデルを作成できますか? –

+0

Alexandru-Ionut Mihaiから与えられた例で動作しています。こちらこそありがとう! – Sarah

関連する問題