javascript - 将列表从 MVC ViewBag 传递到 JavaScript

标签 javascript asp.net-mvc-4 viewbag

我有一个用户列表,我使用 View 包将其从我的 Controller 传递到我的 View 。现在我需要能够将相同的列表传递给页面上的 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 并使用强类型 View 模型。

关于javascript - 将列表从 MVC ViewBag 传递到 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291566/

相关文章:

c# - 当部分 View 位于共享文件夹中时,ASP.NET MVC '@model dynamic' 无法识别模型属性

javascript - 如果参数不在 AJAX 调用期间,则包含 NULL 条目

javascript - 为什么 part_1.js、part_2.js 出现在我的 assetic 编译代码中

javascript - Fiddler:是否可以使用 OnBeforeResponse 函数替换部分 URL?

javascript - 如何在 Excel 宏中使用 Javascript?

javascript - 在 asp.net mvc 4 远程验证失败时触发事件

javascript - 用户名检查不适用于具有多个寄存器模型 (mvc) 的表单

c# - Viewbag检查item是否存在并写出html和value错误

asp.net-mvc - MVC 从另一个 Controller 传递 ViewBag 值

javascript - 使用数组和自执行函数创建循环