Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery.ajax将复杂类型(多个列表)返回到客户端_Jquery_Asp.net_Ajax_List_Pagemethods - Fatal编程技术网

使用jquery.ajax将复杂类型(多个列表)返回到客户端

使用jquery.ajax将复杂类型(多个列表)返回到客户端,jquery,asp.net,ajax,list,pagemethods,Jquery,Asp.net,Ajax,List,Pagemethods,我正在设计一个页面,通过jQuery.ajax对服务器端的页面方法进行ajax调用。 在服务器端,我有两个类:Agent和Channel 在page方法中,我希望将列表和列表返回到客户端。 如何将两个列表返回到客户端?应该将它们封装在一个类中,如: public class ReturnData { public List<Agent> Agents{ get; set; } public List<Channel> Channels{ get;

我正在设计一个页面,通过jQuery.ajax对服务器端的页面方法进行ajax调用。
在服务器端,我有两个类:
Agent
Channel

在page方法中,我希望将
列表
列表
返回到客户端。
如何将两个列表返回到客户端?应该将它们封装在一个类中,如:

public class ReturnData
  {
     public List<Agent> Agents{ get; set; }
     public List<Channel> Channels{ get; set; }
  }  
公共类返回数据
{
公共列表代理{get;set;}
公共列表频道{get;set;}
}  
还是有更好的方法?

另外,如何在客户端访问这些列表的项目?类似于
foreach(代理中的var项)
但在客户端

正如@igorw所评论的,管理它的最好方法是将它们封装在一个JSON对象中。最简单的方法是

return Json(new {agent = Agents, channel = Channels});
这将以javascript友好的格式向您发送代码,并将两个列表分成两部分,这样您就可以通过javascript逐步浏览其中任何一部分,并且仍然知道哪个是哪个。

控制器代码

  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.ajax调用的详细信息。。。如果你能提供更多细节,你可能会找到更好的答案

假设您正在发出GET请求,您可以将列表包装到JSON对象中。JSON序列化所需的badnwidth远远少于HTML/XML序列化对应项。然后,在客户端访问方面,您将处理一个对象文本:

{  
    Agents: [ {name:"Jane"}, {name: "John"} ],
    Channels: [ {someValue: 123}, {someValue: 456} ]
}
使用JSON结果,您可以使用标准JavaScript for/in语法来迭代代理和通道列表


在不了解您的具体情况的情况下,不可能说是否有“更好”的方法,但听起来您已经走上了正确的道路。

容器类工作得很好。通常,您最终也希望在顶层包含一些额外的项,因此容器类很有用

如果不喜欢额外的类,可以使用匿名类型来避免容器类:

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

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

请考虑编辑你的帖子以获得更好的标题。只需以JSON格式返回。@ SJoRD:对不起!标题是我昨晚想问的一个问题。所以我一直保留到现在。@igorw:那我怎样才能遍历它们呢?然后找出哪个项属于哪个列表?如果调用是针对ASP.NET AJAX页面方法的,如问题所述,$.AJAX()代码将无法正常工作。
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.
  }
});