2011-02-08 86 views
4

返回複雜類型(多個列表)到客戶端我設計一個網頁,其中一個Ajax調用(通過jQuery.ajax)到服務器端頁面方法。
在服務器端,我有兩個類:AgentChannel
在頁面的方法,我想一個List<Agent>List<Channel>返回到客戶端。
如何將兩個列表返回給客戶端?應該將它們包裝起來的一類,如:使用jquery.ajax

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

還是有更好的辦法?
另外,如何在客戶端訪問這些列表項目?像foreach(var item in Agents)但在客戶端?

+1

請考慮編輯您的帖子以獲得更好的標題。 – Sjoerd 2011-02-08 14:33:07

+1

只需以JSON格式返回它們即可。 – igorw 2011-02-08 14:34:19

回答

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]); 
           } 
          } 
         }); 
1

正如由@igorw評論,來管理這將是他們包裹起來的JSON對象的最佳方式。要做到這一點會是這樣的最簡單的方法...

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

此向您發送的代碼早在一個JavaScript友好的格式,並保持兩個列表裂開成2塊,這樣你就可以通過其中任何一步通過javascript,並且仍然知道哪個是哪個。

1

你離開了你jQuery.ajax通話的細節......你可能會找到一個更好的答案,如果你能提供更多的細節。

假設你正在做一個GET請求,你可以在一個JSON對象包裝你的列表。與HTML/XML序列化相對應,JSON序列化的要求要少得多。然後,在客戶端准入方面,你會被處理的對象常量:

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

使用您的JSON結果,你可以使用標準的JavaScript /語法來遍歷代理和渠道名單。

這不能說是否有不知道你的情況的詳細信息的「更好」的方式,但它聽起來像是你已經在正確的軌道上。

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. 
    } 
});