2012-03-03 15 views
1

asp.net c#アプリケーションのコードビハインドのメソッドを呼び出すjavascript関数があります。配列をJSON.stringifyに渡し、JSON.stringifyは以下のjsonText値に相当する文字列を返します。以下の値は、返されるレコードの1つのみを表します。なぜjsonがnull値を返すのですか?

var jsonText = "[{\"eacItem\":{\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\",\"AP\":\"201407\",\"EAC\":\"0\"}}]"; 

文字列を関数に渡して、コード内のメソッドを呼び出します。

$.ajax({ 
      type: "POST", 
      traditional: true, //might be needed for serialization to work properly 
      url: pagePath + "/" + "TestMethod", 
      data: "{'eacArray':" + jsonText + "}", 
      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 void TestMethod(List<eacItem> eacArray) 
{ 
    //do something 
} 

これは、メソッドのパラメータ型として設定されたJSONデータに関連付けられたクラスです。

public class eacItem 
{ 
    public string ID { get; set; } 
    public string AP { get; set; } 
    public string EAC { get; set; } 

} 

メソッドに渡されたデータにはレコードが含まれていますが、値はすべて下のスクリーンショットに示すようにnullです。なぜこれが起こっているのか分からず、助けていただければ幸いです。

null array

in code behind

要求された追加情報。 eacArrayの値のスクリーンショットです。 eacArray

これはデバッグにJSON文字列 データにJSON.stringify(eacArray)の JSON

結果: "{ 'eacArray':" + JSON.stringify(eacArray)+ "}"、

"[{\" eacItem \ ":\" 201407 \ "、\" EAC \ ":\" 0 \ "、\" ID \ ":\" dc97d510-cd29- "" \ "EAC \"、\ "EAC \"、\ "EAC \"、\ "ID \":\ "EAC \" \ "\" EAC \ "、\" EAC \ "、\" ID \ "、" \ "、\" EAC \ "、\" EAP \ ":\" 69326e1b-8d69-431f-8a5b-29f8b279d74c \ "}}、{\" eacItem \ ":\" AP \ "、\" 201306 \ "、\" EAC \ ":\" 0 \ "、 \ "ID \":\ "69326e1

  //Iterate through elements on page 
     $('ElementContainingValue').each(function() { 
      var ap = this.attributes.ap.value; 
      var id = this.attributes.id.value; 
      var eac = $(this).val(); 
      var eacItem = { "AP": ap, "EAC": eac, "ID": id }; 
      eacArray.push(eacItem); 

     }); 

     var pagePath = window.location.pathname; 
     $.ajax({ 
      type: "POST", 
      traditional: true, //might be needed for serialization to work properly 
      url: pagePath + "/" + "TestMethod", 
      data: "{'eacArray':" + JSON.stringify(eacArray) + "}", 
      // Contents of eacArray after stringify 
      // "[{\"AP\":\"201407\",\"EAC\":\"0\",\"ID\":\"dc97d510"},{\"AP\":\"201408\",\"EAC\":\"0\",\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\"}] 
      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); 
      } 
     }); 

これは、背後にあるコードで呼ばれる方法である:B-8d69-431f-8a5b-29f8b279d74c \は、 "}}]"

はここで、それは誰も助けることができる場合には修正されたコードです。

これは配列に関連付けられたクラスです。

public class eacItem 
    { 
    public string ID { get; set; } 
    public string AP { get; set; } 
    public string EAC { get; set; } 

    } 
+0

JSON出力を制御しますか?つまり、送信しているJSONですか? –

答えて

1

バブコックは間違いなく私が思う正しい軌道に乗っています。私は.NETの土地ではほとんど仕事をしていませんでしたので、私はこれでやってしまうかもしれませんが、あなたのtestMethodはList型を期待しているようですが、実際にJSONの文字列を渡しているものはMapのようです。おそらくあなたはJSONをこれ以上のように見えるように変更する必要がありますか?

var jsonText = "[{\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\",\"AP\":\"201407\",\"EAC\":\"0\"}, {\"ID\":\"anotherId\",\"AP\":\"anotherAP\",\"EAC\":\"etc\"}]"; 

あなたはビジネスに参加していますか?

+0

これは私が必要なものです。配列の各項目にクラス(この場合はeacItem)を追加することを指定した例を見てきました。それを除去することで、所望の結果が得られた。私は元のpost.Thanksのヘルプの末尾に修正されたコードを追加しました。 – JDM

+0

あなたは大歓迎です!私は助けてうれしいですが、この質問の将来の読者が間違いをよく理解し、それを避けるために、この回答を受け入れるようにお願いします:)嬉しいです! –

3

あなたのPOSTデータは次のとおりです。eacItem(一致するプロパティなど)にマップ可能な任意の情報が含まれていません{'eacArray':" + jsonText + "}"

JSON.stringifyの結果をリクエストに(おそらくFiddlerまたはWiresharkを使用して)渡していることを確認します。ワイヤを通過すると予想されるデータが、送信されると予想されるものと一致するようにする必要があります。

+0

jsonTextの文字列にはID、AP、およびEACがあります。これらは、eacItemクラスのプロパティと一致してはいけませんか? – JDM

+1

はい、 '$ .ajax'に渡しているようには見えません。 –

+0

ご要望の詳細については、オリジナルの投稿の最後にある編集をご覧ください。ありがとう – JDM

0

コンテンツタイプ属性を削除して正常に動作させる

+0

あなたはOPのためにうまくいくのですか?私は、 'contentType'がフレームワークが要求をどのように処理するかを知るために使用した唯一の方法だと思いましたか? –

+0

それ以外の場合、ブラウザはサーバに何も送信しません – linquize

+0

なぜでしょうか? '$ .ajax'に要求のフォーマットを伝えるために、' ContentType'ヘッダを設定する方法を知っておく必要があります。これを削除すると、.NET側の通信が切断される可能性があります(XMLとみなされます)。より適切なJQueryの代替手段はありますか? –

関連する問題