4

Is it a bad practice to pass data from the controller to the script?, ie:

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

By "bypassing the view" I mean doing it this way:

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

And then in my script using selectors I could fill my $.mynamespace.x array.

4

1 回答 1

4

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

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

现在,与直接生成标记相比,这是否合适将取决于具体情况。但是,如果您打算遍历这个 javascript 数组并将 HTML 吐到 DOM 中,老实说,我不太明白这一点。继续并直接在服务器上生成此标记(您的第二种方法)。

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

于 2012-09-17T16:27:56.047 回答