首先,我是MVC和jQuery的新手。如果我的问题或术语不正确,我会道歉。
我目前在我的MVC应用程序中有一个显示地址列表的视图。在同一页面上,我还有一张地图,我想要映射这些位置。
我正在尝试找到将视频对象列表添加到视图中的javascript的“正确”方法,以便可以对其进行迭代和映射。
我见过一些需要从javascript代码调用控制器的getJSON的解决方案。我希望避免使用此解决方案,因为它需要再次访问数据库和Web服务器。我在地图上呈现地址所需的所有信息都已通过ViewData呈现给View。
我还看到了一个解决方案,其中javascript可以访问通过ViewModel.Data传递到视图中的数据,但是这个示例正在处理单个对象,而不是列表。
如果有人有任何提示或资源,我将不胜感激。
由于
答案 0 :(得分:5)
只需将数据呈现到您的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格式的数组。
UPDATE:如果您想使用框架代码自动执行此操作,而不是编写自己的代码以序列化为JSON,请查看JavaScriptSerializer。这是来自伟大的ScottGu的一个方法:Tip/Trick: Building a ToJSON() Extension Method using .NET 3.5
答案 1 :(得分:2)
从技术上讲,ViewData不会渲染输出HTMl,因此不会发送到客户端浏览器。您可以访问ViewData的唯一方法是将其呈现为HTML like数组中的对象或类似:
var cityList = new Array();
function addCity(cityId, cityName) {
var city = new Object();
city.CityID = cityId;
city.CityName = cityName
cityList .push(city);
}
<% foreach (Something.DB.City item in ViewData["Cities"] as List<City>)
{ %>
addCity(item.Id, item.Name);
<% } %>
当我需要为javascript呈现数据
时,这就是我通常的做法答案 2 :(得分:1)
您可以在服务器上以JSON格式化数据(作为字符串)。将其分配给您的ViewData。在View中,将ViewData分配给javascript变量。
<script type="text/javascrpt">
var objList = <%= ViewData["objectListJSON"]; %>;
for (var obj in objList)
{
...
}
</script>