Chr*_*ris 4 javascript razor asp.net-mvc-3
我想在一个mvc应用程序中构建一个谷歌图表.
这是一个谷歌图表javascript的片段
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task');
data.addColumn('number', 'Hours per Day');
data.addRows([
['Work', 11],
['Eat', 2],
['Commute', 2],
['Watch TV', 2],
['Sleep', 7]
]);
Run Code Online (Sandbox Code Playgroud)
}
我想要做的是基本上用for循环替换上面的data.addRows行,迭代我模型中的项目.我可以在标签之外的视图中迭代得很好,当然:
"@foreach (var item in Model) {
<div>@Html.DisplayFor(modelItem => item.Customer.Name)</div>
}"
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到迭代我的模型INSIDE标签的解决方案.有任何想法吗?
假设您有一个视图模型:
public class MyViewModel
{
public object[][] Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在其中存储一些值并传递给视图:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Values = new[]
{
new object[] { "Work", 11 },
new object[] { "Eat", 2 },
new object[] { "Commute", 2 },
new object[] { "Watch TV", 2 },
new object[] { "Sleep", 7 },
}
};
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的视图中,您可以对JSON进行编码:
@model MyViewModel
<script type="text/javascript">
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task');
data.addColumn('number', 'Hours per Day');
data.addRows(@Html.Raw(Json.Encode(Model.Values)));
}
</script>
Run Code Online (Sandbox Code Playgroud)
它将在最终标记中呈现为:
<script type="text/javascript">
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task');
data.addColumn('number', 'Hours per Day');
data.addRows([["Work",11],["Eat",2],["Commute",2],["Watch TV",2],["Sleep",7]]);
}
</script>
Run Code Online (Sandbox Code Playgroud)
并且您不应该担心包含单引号或双引号的值可能会破坏您的javascript,因为您使用了JSON序列化程序而不是手动构建它.