微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过页面/视图上的javascript迭代ViewData中的对象?

首先,我是MVC和jQuery的新手.如果我的问题或术语不正确,我会道歉.

我目前在我的MVC应用程序中有一个显示地址列表的视图.在同一页面上,我还有一张地图,我想要映射这些位置.

我试图找到将视频对象列表添加到视图中的javascript的“正确”方法,以便可以迭代并映射.

我已经看到一些解决方案需要从javascript代码调用控制器的getJSON.我希望避免使用此解决方案,因为它需要再次访问数据库和Web服务器.我需要在地图上呈现地址所需的所有信息都已通过ViewData呈现给View.

我还看到了一个解决方案,其中javascript可以访问通过viewmodel.Data传递到视图中的数据,但是这个示例正在处理单个对象,而不是列表.

如果有人有任何提示或资源,我将不胜感激.

谢谢

解决方法:

只需将数据渲染到您的JavaScript中即可.假设您有一个地址对象列表,如下所示:

public class Address
{
    public string Line1 { get; set; }
    public string City { get; set; }
}

// in your controller code
ViewData["Addresses"] = new List<Address>(new Address[] { new Address() { Line1="bla", City="somewhere"}, new Address() {Line1="foo", City="somewhereelse"}});

将它渲染到你的javascript中,如下所示:

<script type="text/javascript">
var addresses = new Array(
<% for (int i = 0; i < ViewData["Addresses"].Count; i++) { %>
<%= i > 0 : "," : "" %>({line1:"<%= addr.Line1 %>", city:"<%= addr.City %>"})
<% } %>);
</script>

这基本上用javascript中的地址对象创建一个JSON格式的数组.

更新:如果您想使用框架代码自动执行此操作而不是编写自己的代码以序列化为JSON,请查看JavaScriptSerializer.这是来自伟大的ScottGu的一个方法Tip/Trick: Building a ToJSON() Extension Method using .NET 3.5

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐