将数据从控制器传递到javascript(绕过视图)

时间:2012-09-17 16:22:20

标签: javascript asp.net-mvc razor

将数据从控制器传递到脚本是不好的做法?,即:

<script>
   @foreach (... in ViewBag.X) {
         $.mynamespace.x[i] = ...
   }
</script>

通过“绕过视图”,我的意思是这样做:

<ul id="..." style="display:none;">
@foreach (... in ViewBag.X) {
    <li id="...">...</li>
   ...
}
</ul>

然后在我的脚本中使用选择器,我可以填充我的$.mynamespace.x数组。

1 个答案:

答案 0 :(得分:4)

你这样做是不好的做法。正确的方法是对JSON进行编码,以确保所有值都从服务器到客户端javascript正确编码:

<script type="text/javascript">
   $.mynamespace.x = @Html.Raw(Json.Encode(ViewBag.X));
</script>

现在,与直接生成标记相比,这是否正常取决于具体情况。但是如果你打算循环遍历这个javascript数组并将HTML吐入DOM,说实话,我并不是很清楚。继续直接在服务器上生成此标记(第二种方法)。

关于ViewBag的最后评论:不要使用它。请改用强类型视图模型。