【问题标题】:asp.net mvc - how can you loop through model data in javascriptasp.net mvc - 如何在 javascript 中循环遍历模型数据
【发布时间】:2010-01-04 22:45:59
【问题描述】:

我正在尝试在 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);
                        }

【问题讨论】:

标签: javascript asp.net-mvc


【解决方案1】:

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

这可以在 razor 语法中使用 @: 在行的开头完成以在 javascript 中运行(从 c# 中转义)。

我的Model.xValues 是从控制器传递的List&lt;String&gt;。而yValuesList&lt;int&gt;

下面是一个快速示例,说明如何在 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】:

您不能以这种方式将在服务器上运行的代码(&lt;% %&gt; 块的音译)与在客户端上运行的代码(for 循环)混合。在 C# 中而不是在 javascript 中进行迭代,并在您可以简单地分配的字符串中创建一个 javascript 对象。

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

【讨论】:

  • 你的建议很酷,但我看到问题有 'in javascript' 部分,所以我认为最好更改问题标题。
【解决方案3】:

您需要在 .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错误。我认为您还需要在循环外声明它,并在循环内简单地重用它。
猜你喜欢
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2022-08-01
相关资源
最近更新 更多