2011-02-08 18 views
4

サーバー側のページメソッドに対してajax呼び出し(jQuery.ajax経由)を行うページを設計しています。
サーバー側には、AgentChannelという2つのクラスがあります。
ページメソッドでは、クライアント側にList<Agent>List<Channel>を返したいと思います。
クライアント側に2つのリストを返すにはどうすればよいですか?次のようなクラスにまとめてください:jquery.ajaxを使用して複合型(複数のリスト)をクライアント側に返す

public class ReturnData 
    { 
    public List<Agent> Agents{ get; set; } 
    public List<Channel> Channels{ get; set; } 
    } 

もっと良い方法がありますか?
また、クライアント側でこれらのリストの項目にアクセスするにはどうすればよいですか?クライアント側にはforeach(var item in Agents)のようなものがありますか?

+1

あなたの投稿をより良いタイトルにすることを検討してください。 – Sjoerd

+1

JSON形式で返すだけです。 – igorw

+0

@Sjoerd:申し訳ありません!タイトルは、私が昨夜尋ねたかった質問です。今まで、SOはそれを保ってきました。 – Kamyar

答えて

3

コントローラー・コード

public ActionResult SomeAction() 
    { 
     List<Agent> collectionOfAgents = //get your collection 
     List<Channels> collectionOfChannels = //get your collection 
     var jsonData = new 
          { 
            Agents =collectionOfAgents, 
            Channels = collectionOfChannels 

          }; 
     return Json(jsonData); 
    } 

jQueryのコード

    jQuery.ajax({ 
          url: '/Controller/SomeAction', 
          type: "POST", 
          dataType: "json", 
          success: function (data) { 
           var collectionOfAgents = data.Agents; 
           //iterate over agents 
           for(var a in collectionOfAgents) 
           { 
            alert(collectionOfAgents[a]); 
           } 
           var collectionOfChannels = data.Channels; 
           //iterate over channels 
           for(var c in collectionOfChannels) 
           { 
            alert(collectionOfChannels[c]); 
           } 
          } 
         }); 
+0

呼び出しがASPにある場合。NET AJAXのページメソッドは、質問と同様に、$ .ajax()コードが正しく機能しないことを示しています。 –

1

@igorwがコメントしたように、それを管理する最良の方法は、JSONオブジェクトでそれらを包むことです。これを行う最も簡単な方法は何かのような...

return Json(new {agent = Agents, channel = Channels}); 

だろうこれは、バックjavascriptのフレンドリーなフォーマットで、あなたにコードを送信し、あなたがそれらのいずれかをステップ実行することができますので、二つのリストが2個に裂け続けますjavascriptで、まだどちらがどちらかを知っている。

1

あなたはより詳細な情報を提供できるかどうか...あなたがより良い答えを見つけることが、あなたのjQuery.ajaxコールの詳細を残しました。

GETリクエストを行っているとすれば、リストをJSONオブジェクトにラップすることができます。 JSONシリアライゼーションでは、HTML/XMLシリアライズ対応のものよりもはるかに少ない悪影響が要求されます。あなたがエージェントとチャンネルリストを反復する構文で用/標準のJavaScriptを使用することができ、あなたのJSONの結果を用いて

{ 
    Agents: [ {name:"Jane"}, {name: "John"} ], 
    Channels: [ {someValue: 123}, {someValue: 456} ] 
} 

:次に、クライアント側のアクセスの面で、あなたは、オブジェクトリテラルを扱うことになります。

あなたの状況の詳細を知らなくても「より良い」アプローチがあるかどうかはわかりませんが、あなたが正しい軌道に乗っているように聞こえます。

3

コンテナクラスは十分に機能します。しばしば、トップレベルにいくつかの余分な項目を含めることを望むことになり、コンテナクラスが便利です。

あなたは、コンテナクラスを避けるために、匿名型を使用することができ、余分なクラスが気に入らない場合:クライアント側で

public static object GetAgentsAndChannels() { 
    List<Agent> agents = GetListOfAgents(); 
    List<Channel> channels = GetListOfChannels(); 

    return new { Agents: agents, Channels, channels }; 
} 

を、彼らは通常の配列として存在することでしょう。

$.ajax({ 
    url: 'YourPage.aspx/GetAgentsAndChannels', 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/json', 
    success: function(response) { 
    var agentsAndChannels = response.d; 

    var numberOfAgents = agentsAndChannels.Agents.length; 
    var numberOfChannels = agentsAndChannels.Channels.length; 

    var firstAgent = agentsAndChannels.Agents[0]; 

    var firstChannelName = agentsAndChannels.Channels[0].Name; 

    // Etc. 
    } 
}); 
関連する問題