使用jquery.ajax将复杂类型(多个列表)返回到客户端
我正在设计一个页面,通过jQuery.ajax对服务器端的页面方法进行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;
在服务器端,我有两个类:
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.
}
});