2016-05-23 9 views
0

Ivは関連する質問を検索しましたが、それでも私の状況でこれを動作させることはできません。私はASP.NET MVCで働いています。Ajaxがコントローラのアクションに配列を渡していませんか?

私は3つのフィルタを持つレポートを持っています。フィルター1と2には1つの値しか選択できません。私の3番目のフィルターはマルチセレクトフィルターです。私はMulti Select Filterから選択されたすべての値を持つ配列をロードします。次に、3つのフィルタをすべてコントローラアクションに渡します。フィルタ1と2は正常に動作しますが、マルチ選択フィルタは渡されておらず、アクションパラメータにNullとして表示されます。

以下は私のJavaScriptとAjaxのコール

$('#applyFilter').click(function() { 

      var options = new Array(); 
      //Fill array with values from Multi Select Filter 
      $('#treeFilter > option:selected').each(
       function (i) { 
        options[i] = $(this).text(); 
       }) 


      var filter1 = $('#LOCFilterDropdown').val(); 
      var filter2 = $('#ESNFilterDropdown').val(); 

      $.ajax({ 
       type: "GET", 
       url: "/Home/FilterReport", 

       data: { 
        filterOne: filter1, 
        filterTwo: filter2, 
        multiselectFilter: options 
       }, 
       success: function (result) { 
        $('#reportTable').html(result); 
       } 
      }); 
     }); 

受信アクションです

[HttpGet] 
public ActionResult FilterReport(string filterOne,string filterTwo, int? page, List<string> multiselectFilter) 
{ 
    //filterOne contains correct value 
    //filterTwo contsins correct value 
    //multiSelectFilter contains null 

    //returns partial view 

} 

List<string> multiselectFilter 
//Iv also tried string[] multiselectFilter, but this didnt change anything 

は今、AJAX呼び出しからの配列を受信して​​いる理由は誰でも教えてもらえます?

+0

あなたのhtmlの外観はどうですか? – pparas

+0

@pparas htmlはうまくいきます。 Console.Log()で配列をテストして、配列の内容を表示しました。配列の中に正しい値があります。 – Reeggiie

+0

@pparasこれはフィルタリストを作成する方法です。このコメントを投稿するには、剃刀のsytaxの@を削除しなければなりません。 Reeggiie

答えて

0

GETメソッドを使用して複雑なオブジェクトを送信しようとしています。これが失敗する理由は、GETメソッドがボディを持つことができず、すべての値がURLにエンコードされているためです。

同様の質問

Complex type is getting null in a ApiController parameter

私はクライアントにMultiselectfilterに参加し、

multiselectFilter: options.join(',')

[HttpGet] 
    public ActionResult FilterReport(string filterOne, string filterTwo, int? page, string multiselectFilter) 
    { 
     string[] array = multiselectFilter.Split(','); 

     //returns partial view 

    } 
+0

パーフェクト、ありがとうございます。あなたの答えに基づいて 'GET'を 'POST'に変更しようとしましたが、それも機能します。 – Reeggiie

0

私が作成したサーバー側でそれらを分割するだろうフィドルhere。私はあなたがシリアル化に問題があるかもしれないと思う。私は100%確実ではありませんが。ここでは、options = JSON.stringify(options);をシリアル化するコードは、前の答えと同様に言っている。

+0

例をありがとうございます。複雑なオブジェクトをGETリクエストで使用することはできません。 – Reeggiie

0

また、あなたのAJAX呼び出しのアドオンでこれらを追加しようとすることができます:

dataType: "json", 
traditional: true 

オプションの配列は大きな得ることができた場合は、URLの最大長制限に達し避けるように、私はPOSTを使用します。

関連する問題