2012-01-03 76 views
4

我正在使用Razor將項目插入到JavaScript數組中。它使用下面的代碼按預期工作。但是,它會在數組末尾添加一個逗號。有人可以建議一種方法來防止這種情況發生嗎?如何在使用Razor填充的此JavaScript數組結尾處刪除逗號?

graphByMonth = new Array(

@foreach (var cost in Model.Cost) { 
    <text> 
    [@cost.CPM, '@cost.EndDate'], 
    </text> 
    } 
); 
+1

爲什麼不將它序列化到JSON數組服務器端?那不是那麼容易嗎? – RPM1984 2012-01-03 04:31:40

+0

只是離開它,js可以在數組末尾使用一個逗號 – Omu 2012-01-03 12:12:15

+0

@ChuckNorris逗號導致我使用數組的其他腳本出現問題。這就是爲什麼我試圖消除它。 – hughesdan 2012-01-03 15:09:45

回答

2

在處理javascript時,不應該使用任何字符串連接。如果你希望將一些服務器端模型傳遞到JavaScript變量,你可以JSON序列化這樣以確保危險字符都正確轉義:

var graphByMonth = @Json.Encode(Model.Cost.Select(cost => new { 
    cpm = cost.CPM, endDate = cost.EndDate 
})); 

這將作爲渲染:

var graphByMonth = [ 
    { cost: '1', endDate: 'date 1' }, 
    { cost: '2', endDate: 'date 2' }, 
    { cost: '3', endDate: 'date 3' } 
]; 

使用Json.Encode你要確保這些值是正確編碼的,並且你不會有任何破壞的語法,如果你曾嘗試通過使用一些字符串連接,foreach循環或其他任何方法來手動執行此操作,那麼將會得到什麼樣的語法。

+1

感謝您指出錯誤。我刪除了我的答案,因爲這是正確的方法。 – 2012-01-03 16:19:11

+0

我同意。問題不在於js,問題在於服務器for-loop追加了額外的逗號。 – 2012-01-03 16:23:13