我正在设计一个页面,它对服务器端的页面方法进行ajax调用(通过jQuery.ajax)。
在服务器端,我有两个类:Agent
和Channel
在页面方法中,我想将List<Agent>
和List<Channel>
返回给客户端。
如何将两个列表返回给客户端?应该将它们包装在一个类中,如:
public class ReturnData
{
public List<Agent> Agents{ get; set; }
public List<Channel> Channels{ get; set; }
}
或者有更好的方法吗?
另外,如何在客户端访问这些列表的项目?像foreach(var item in Agents)
这样的东西,但在客户端?
答案 0 :(得分: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 :(得分: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.
}
});
答案 2 :(得分:1)
正如@igorw评论的那样,管理它的最佳方法是将它们包装在JSON对象中。最简单的方法就是......
return Json(new {agent = Agents, channel = Channels});
这会以javascript友好格式向您发送代码,并将两个列表分成两部分,因此您可以通过javascript逐步浏览它们,并且仍然知道哪一个是哪个。
答案 3 :(得分:1)
您遗漏了jQuery.ajax电话的详细信息......如果您能提供更多详细信息,可以找到更好的答案。
假设您正在发出GET请求,您可以将列表包装在JSON对象中。与HTML / XML序列化相比,JSON序列化所需的badnwidth要少得多。然后,就客户端访问而言,您将处理对象文字:
{
Agents: [ {name:"Jane"}, {name: "John"} ],
Channels: [ {someValue: 123}, {someValue: 456} ]
}
使用您的JSON结果,您可以使用标准JavaScript for / in语法来迭代代理和频道列表。
在不了解情况细节的情况下,无法说出是否有“更好”的方法,但听起来你已经走在了正确的轨道上。