ASP.NET MVC - 如何在JavaScript中循环遍历模型数据

3

我正在尝试在JavaScript中向列表框添加数据,但是字符串构建语法让我困惑:

var yourobject = '<%=Model.Inserts['+ i + ']%>';

会导致错误:"字符文字中的字符太多"

所有代码:

var mlb = cm.createListBox('mylistbox', {
                        title: 'My list box',
                        onselect: function(v) {
                                tinyMCE.activeEditor.windowManager.alert('Value selected:' + v);
                            }
                        });


                        for (var i = 0; i < '<%=Model.Inserts.Count() %>'; i++) {
                            var yourobject = '<%=Model.Inserts['+ i + ']%>';
                            mlb.add(yourobject, i);
                        }

在此处查看新答案 https://dev59.com/emAg5IYBdhLWcg3wSpPD - Andrew Day
3个回答

13

我知道这是一个旧问题,但答案已经过时了,因为现在有可能实现。

可以使用 razor 语法,在要运行 JavaScript 的行首使用 @:(从 C# 转义)。

我的 Model.xValues 是从控制器传递的 List<String>,而 yValuesList<int>

以下是如何在 JavaScript 函数中循环遍历模型数据的示例:

<script type="text/javascript">
   function drawChart() {

        // Create the data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', '@Model.LabelName');
        data.addColumn('number', '@Model.ValueName');

       @for(int i = 0; i < Model.xValues.Count; i ++)
       {
           @: data.addRow(['@Model.xValues.ElementAt(i)', @Model.yValues.ElementAt(i)]);
       }

       ... etc

</script>

2
非常感谢您提供如此优雅的解决方案。我甚至能够做出类似于这样的东西:https://gist.github.com/saad749/db606466725cff8f96b5a766da4a4dad - Segmentation Fault

3

在这种方式下,你不能混合运行在服务器上的代码(<% %>块的转换)和客户端上运行的代码(for循环)。请在C#中进行迭代,然后创建一个javascript对象字符串,可以直接赋值。

<%  var aray = "[";
    foreach (var insert in Model.Inserts) {
        aray += "'" + insert + "',";
    }
    aray = aray.TrimEnd(",") + "]";
 %>
    var mlb = <% aray %>;

你的建议很好,但我看到问题有“在JavaScript中”的部分,所以我觉得最好更改问题标题。 - QMaster

2
您需要在.NET代码块中循环遍历您的Model对象,并将这些值分配给该循环中的JavaScript变量:
var count = 0, yourobject; // This is JavaScript

<% for (var i = 0; i < Model.Inserts.Count(); i++) { %> // This is .NET 
       yourobject = '<%= Model.Inserts[i] %>'; // This is JS AND .NET
       mlb.add(yourobject, count++); // This is JavaScript
<% } %>

这样不会输出多个 var yourobject... 语句吗?那将会是一个 JavaScript 错误。我认为你需要在循环外声明它,并在循环内重复使用它。 - tvanfosson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接