使用 jquery.ajax 将复杂类型(多个列表)返回到客户端
我正在设计一个页面,它对服务器端的页面方法进行 ajax 调用(通过 jQuery.ajax)。
在服务器端,我有两个类:Agent
和 Channel
。
在页面方法中,我想向客户端返回一个 List
和 List
。
如何向客户端返回两个列表?应该将它们包装在一个类中,例如:
public class ReturnData
{
public List<Agent> Agents{ get; set; }
public List<Channel> Channels{ get; set; }
}
或者有更好的方法吗?
另外,我如何在客户端访问这些列表的项目?类似 foreach(var item in Agents)
但在客户端?
I'm designing a page which makes an ajax call (via jQuery.ajax) to a page method on the server side.
On the server side, I have two classes: Agent
and Channel
.
In the page method, I'd like to return a List<Agent>
and a List<Channel>
to the client side.
How can I return two lists to client side? should wrap them up in one class like:
public class ReturnData
{
public List<Agent> Agents{ get; set; }
public List<Channel> Channels{ get; set; }
}
Or is there a better way?
Also, How can I access to these lists' items in client side? Something like foreach(var item in Agents)
but in client side?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
控制器代码
Jquery代码
Controller code
Jquery code
容器类工作得很好。通常,您最终希望在顶层也包含一些额外的项目,然后容器类就很有用了。
如果您不喜欢额外的类,您可以使用匿名类型来避免容器类:
在客户端,它们将作为常规数组出现。您可以像这样访问它们:
The container class works well enough. Often, you end up wanting to include a few extra items at the top level too, and then the container class is useful.
If you don't like the extra class, you can use an anonymous type to avoid the container class:
On the client-side, they'll be present as regular arrays. You can access them like this:
正如 @igorw 所评论的,管理它的最佳方法是将它们包装在 JSON 对象中。最简单的方法是这样的...
这会将代码以 javascript 友好的格式发送回来,并将两个列表分成两部分,这样您就可以通过 javascript 单步执行其中任何一个,并且仍然知道哪个一个是哪个。
As was commented by @igorw, the best way to manage it would be to wrap them up in a JSON object. Easiest way to do this would be something like...
This sends you the code back in a javascript friendly format, and keeps the two lists split apart into 2 pieces, so you can step through either of them by javascript, and still know which one is which.
您遗漏了 jQuery.ajax 调用的详细信息...如果您可以提供更多详细信息,您可能会找到更好的答案。
假设您发出 GET 请求,您可以将列表包装在 JSON 对象中。 JSON 序列化所需的 badnwidth 比 HTML/XML 序列化对应物少得多。然后,在客户端访问方面,您将处理对象文字:
使用 JSON 结果,您可以使用标准 JavaScript for/in 语法来迭代代理和通道列表。
在不了解您的具体情况的情况下,不可能说是否有“更好”的方法,但听起来您已经走在正确的轨道上。
You left out the details of your jQuery.ajax call... you may find a better answer if you can provide more detail.
Assuming you're making a GET request, you can wrap your lists in a JSON object. JSON serialization will require far less badnwidth than HTML/XML serialization counterparts. Then, in terms of client-side access, you'll be dealing with an object literal:
Using your JSON result you can use standard JavaScript for/in syntax to iterate over the Agents and Channels lists.
It's not possible to say whether there's a "better" approach without knowing the details of your situation, but it sounds like you're already on the right track.