2010-01-04 41 views
2

我特林數據添加到JavaScript的一個列表框模型數據,但是串建築語法已難倒我:asp.net mvc的 - 你怎麼能遍歷的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); 
         } 
+0

看到這裏http://stackoverflow.com/questions/23781034/razor-mvc-populating-javascript-array-with-model-array – 2015-11-27 21:13:38

回答

3

不能混淆代碼服務器(的音譯上運行<% %>塊)與那種方式在客戶端上運行(for循環)。在C#中進行迭代,而不是在JavaScript中,並在可以簡單分配的字符串中創建一個JavaScript對象。

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

你的建議很酷,但我看到問題'在JavaScript'部分,所以我認爲這是更好的更改問題標題。 – QMaster 2016-08-25 11:48:13

2

你W¯¯生病需要遍歷在.NET代碼塊你的模型對象,並在該循環分配這些值到你的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 
<% } %> 
+0

新的答案這是不是輸出多個'變種yourobject ... '陳述?這將是一個JavaScript錯誤。我認爲你需要在循環之外聲明它,並簡單地在循環中重用它。 – tvanfosson 2010-01-04 22:56:37

+0

根據您的評論修改...謝謝! – 2010-01-04 22:59:23

11

我知道這是一個老問題,但答案是過時的,因爲現在可以。

這可以在剃刀語法中使用@:開始在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> 
+1

+1正是我需要的! – lhan 2013-07-01 19:24:17

+2

非常感謝您提供優雅的解決方案。我甚至可以做這樣的事情:https://gist.github.com/saad749/db606466725cff8f96b5a766da4a4dad – 2017-02-02 05:55:09