2013-06-11 38 views
1

當我在MVC 4中的@section內部使用JavaScript for循環時,出現了一個解析器錯誤,該錯誤指出了大括號}。我見過其他一些關於這個的帖子(這是MVC4之前的Razor 2.0中的一個已知的bug),但似乎沒有解決如何做到這一點。@section循環中的Javascript導致語法分析器錯誤

我不是JavaScript專家,那麼還有另一種方式來聲明和調用這個或什麼?

@section onReady{ 
var oTable; 

    oTable = $('#services').dataTable({ 
     "iDisplayLength": 100,    
     "bJQueryUI": true, 
     "aoColumns": [ 
    { "bSortable": false, "bSearchable": false }, 
    null, null, null, null, null, null ], 

     "fnFooterCallback": function(nFoot, aData, iStart, iEnd, aiDisplay) 
     { 
      var iCalls = 0; 
      for (var i=0 ; i < aData.length ; i++) 
      { 
       iCalls += aData[i][4]*1; 
      }   
     } 
    }); 
} 
+0

我想你的循環迭代之一沒有實際設置的aData [i] [4],那是什麼打破它。你可以用if(typeof(aData [i] [4])!==「undefined」){...}來包裝它,以便修復它。您也可以通過console.log(aData)驗證aData的內容,並在控制檯中檢查它。 – Rooster

回答

2

請勿將部分放入腳本標記中。相反,在佈局頁這樣的行:

@RenderSection("scripts", required: false) 
視圖

然後:

@section scripts { 
<script type="text/javascript"> 
     var oTable; 
     //... 
</script> 
} 
1

你需要<script>標籤。

@section onReady{ 

<script type='text/javascript'> 

$(function() { 
    var oTable; 

    oTable = $('#services').dataTable({ 
     "iDisplayLength": 100, 
      "bJQueryUI": true, 
      "aoColumns": [{ 
      "bSortable": false, 
      "bSearchable": false 
     }, 
     null, null, null, null, null, null], 

      "fnFooterCallback": function (nFoot, aData, iStart, iEnd, aiDisplay) { 
      var iCalls = 0; 
      for (var i = 0; i < aData.length; i++) { 
       iCalls += aData[i][4] * 1; 
      } 
     } 
    }); 
}); 
</script> 
} 
+0

這是有幫助的,但它使該屏幕上的其他東西停止工作在我的DataTables的東西(大部分是從Web上的其他人蔘與),從樣式到功能。即使你是對的,我可能需要另一種方法。 – Geminirand

+0

你一定要確保你可以限制document.ready的數量。一個是最好的,所以它是集中的,你沒有得到任何競爭條件。 – Gabe