2017-02-01 6 views
-3

私のjavascriptからコントローラーに配列オブジェクトを渡したいだけです。しかし、それはチェックボックスの値を与えるアラートまで、だから私はジャバスクリプトに間違っているとは思わない。コントローラでは、オブジェクトは常にnullです。私はここで何をやったのですか?配列オブジェクトをWebサービスコントローラーに渡そうとしていますが、常にnullです

function amal() { 

var selected = []; 

$('input[type="checkbox"]:checked').each(function() { 

    selected.push($(this).val()); 
}); 
alert(selected); 

$.ajax({ 
    url: "http://localhost:63138/api/Emptbles/LoadAmal", 
    type: "POST", 
    data: selected, 

    contentType: "application/json", 
    success: function (response) { 
     alert("success"); 
     myFunction(); 
    }, 
    error: function() { 

    } 
}); 

マイAPIコントローラ

[HttpPost] 
    public IHttpActionResult LoadAmal(List<selectedSymptoms>list) 
    { 
     string item1 = ""; 
     string item2 = ""; 
     string item3 = ""; 


     for (int i = 0; i < list.Count; i += 3) 
     { 
      //grab 3 items at a time and do db insert, 
      // continue until all items are gone.. 
      item1 = list.ElementAt(i+0).ToString(); ; 
      item2 = list.ElementAt(i + 1).ToString(); ; 
      item3 = list.ElementAt(i + 2).ToString(); ; 
      // use the items 
     } 

     string query = "EXEC Add_Employee'" + item1 + "','" + item2 + "','" + item3 + "'"; 

     int result = connectionProvider.CreateSomething(query); 


     return Ok(result); 
} 

マイselectedSymptomsクラス(私はコントローラにジェイソン・オブジェクトを取りたい、これが正しいかどうか知らない。ありがとうございました)

public class selectedSymptoms 
{ 
    public void PassThings(List<selectedSymptoms> symtoms) 
    { 
     var t = symtoms; 
    } 


} 
+1

APIは次のようになります。オブジェクトは、シリアライザがRequestからプロパティをマップできるように、同じプロパティを共有する必要があります。これは 'List '(または別の単純なタイプ)のタイプの場合には異なります –

+0

コメントの投稿コードは機能しません。あなたの質問を編集する必要があります –

+0

@マーク私はrqquestedクラスを追加しました。あなたはそれを見ていただけますか? – Amal

答えて

-1

てみてくださいこれは:

data: { 'list' : selected } 
0

実行しているシナリオは、送信しているオブジェクトとWeb APIの間のシリアル化の問題です。マイクロソフトgives you code to test this process、それはあなたに多くのことを教えるので、私はあなたが使用することをお勧めします。

あなたはあなたの応答を送っているのは、おそらく次のようになります。

["someValue1", "someValue2", "etc"] 

あなたのAPIでTypeはシリアライズする必要があり、あなたの現在のクラス与えられたことをやっての一切の可能な方法はありません。あなたがしたいのは、文字列のリストを送ることだけで、複雑なオブジェクトをまったく使用しないでください。単純にList<string>を使用してください。実際に複雑なオブジェクトを使用する場合は、データをマップするプロパティが必要です。あなたは私たちは基本的に作成しているかを確認することができます

var people = []; 

$('input[type="checkbox"]:checked').each(function() { 
    var Person = new Object(); 
    Person.Name = $(this).val(); 
    people.push(Person); 
}); 

$.ajax({ 
    url: "http://localhost:63138/api/Emptbles/LoadAmal", 
    type: "POST", 
    data: people, 
    contentType: "application/json", 
    success: function (response) { 
    }, 
    error: function() { 
    } 
}); 

:私はクラス

public class Person 
{  
    public string Name {get; set;} 
} 

を持っていたし、私はそれのJavaScriptのオブジェクト表現を投稿したい場合

、私のコードは次のようになります。 C#クラスのJavaScriptバージョンの配列であり、2つのオブジェクトの間にNameプロパティを簡単にマッピングできます。 `selectedSymptoms`がどのように見えるかを確認する必要があり

public IHttpActionResult GetStuff(List<Person> peeps) {} 
関連する問題