首先,我对MVC和jQuery相当陌生。如果我的问题或术语不正确,我深表歉意。

我目前在MVC应用程序中有一个显示地址列表的 View 。在同一页面上,我还有一张希望将这些位置映射到的 map 。

我试图找到将地址对象的列表获取到 View 中的javascript的“适当”方法,以便可以对其进行迭代和映射。

我已经看到一些解决方案,它们需要从javascript代码对 Controller 进行getJSON调用。我希望避免这种解决方案,因为它需要再次访问数据库和Web服务器。我需要在 map 上呈现地址的所有信息已经通过ViewData呈现给View。

我还看到了一个解决方案,其中javascript可以访问通过ViewModel.Data传递到 View 中的数据,但是此示例仅处理单个对象,而不是列表。

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

谢谢

最佳答案

只需将数据渲染到您的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

10-05 21:07
查看更多