我有一个用户列表,我使用视图包从控制器传递到我的视图。现在我需要能够将相同的列表传递给页面上的 javascript。我可以使用 foreach 循环重建列表:
@foreach (var item in ViewBag.userList) //Gets list of users passed from controller and adds markers to the map
{
var userLat = item.LastLatitude;
var userLon = item.LastLongitude;
var _userId = item.Id;
<script>array.push({"userId":"'@_userId'","userLat":"'@userLat'","userLon":"'@userLon'"});</script>
}
然而,这似乎是一种混乱的方法,如果进行更改则需要大量返工。我知道 Stack Overflow 上有类似的帖子,但其中很多都使用以前版本的 MVC,并且相同的语法似乎不适用。有任何想法吗?
您可以使用 JSON 解析器通过一行安全的代码来完成此操作。您绝对不应该像您在示例中尝试那样手动构建带有一些字符串连接和内容的 JSON。也不需要编写任何循环。
这是正确的方法:
<script type="text/javascript">
var array = @Html.Raw(
Json.Encode(
((IEnumerable<UserModel>)ViewBag.userList).Select(user => new
{
userId = user.Id,
userLat = user.LastLatitude,
userLon = user.LastLongitude
})
)
);
alert(array[0].userId);
</script>
生成的 HTML 看起来将完全符合您的预期:
<script type="text/javascript">
var array = [{"userId":1,"userLat":10,"userLon":15}, {"userId":2,"userLat":20,"userLon":30}, ...];
alert(array[0].userId);
</script>
当然,这段代码的下一个改进是摆脱ViewCrap
并使用强类型视图模型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)