我想在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 :(得分:11)
我知道这是一个老问题,但答案已经过时了,因为现在可以了。
这可以在razor语法中使用@:
在行的开头用javascript运行(从c#中转义)。
我的Model.xValues
是从控制器传递的List<String>
。 yValues
是List<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 :(得分:3)
您不能以这种方式将在服务器上运行的代码(<% %>
块的音译)与客户端上的运行(for循环)混合在一起。在C#中进行迭代而不是在javascript中进行迭代,并在字符串中创建一个javascript对象,您可以简单地分配。
<% var aray = "[";
foreach (var insert in Model.Inserts) {
aray += "'" + insert + "',";
}
aray = aray.TrimEnd(",") + "]";
%>
var mlb = <% aray %>;
答案 2 :(得分: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
<% } %>