在我的实际任务中,我需要基于ASP.NET MVC为app创建图形。 我找到了合适的js,但是我强迫一个问题如何从值创建js对象,这是在控制器中创建的。 例如:
public class User
{
public string Name { get; set; }
public string Group { get; set; }
}
public ActionResult Index()
{
List<User> users = new List<User>()
{
new User{Name = "Boss", Group = "Boss"},
new User{Name = "Emp 1", Group = "Emps"},
new User{Name = "Emp 2", Group = "Emps"},
new User{Name = "Emp 3", Group = "Emps"},
new User{Name = "Emp 4", Group = "Emps"},
};
ViewBag.Users = users;
return View();
}
我的控制器中有User
的集合。
在js代码下面,我需要创建
var nodes = [
{ "name": "Boss", "group": "Boss" },
{ "name": "Emp 1", "group": "Emps" },
{ "name": "Emp 2", "group": "Emps" },
{ "name": "Emp 3", "group": "Emps" },
{ "name": "Emp 4", "group": "Emps" },
];
我现在想创建像
这样的js代码var nodes = function () {
var array = [];
for (var i = 0; i < @ViewBag.Users.Count; i++) {
array.push({"name": @ViewBag.Users[i].Name, "group": @ViewBag.Users[i].Group})
}
return array;
};
P.S。由于i
不存在,此代码无效。
答案 0 :(得分:1)
我认为对您的问题有更好的解决方法。您正在询问如何从视图中的控制器传递值。您的方法可行,但将对象作为视图模型传递会更简单。
返回View()时,需要传递包含列表的对象。
像这样:
return View(users);
然后,在您的视图中,您需要注册您的模型
@model IEnumerable<User>()
之后使用简单的foreach
,您可以迭代模型并显示值:
@foreach(var item in Model){
//do whatever you want with the item
}
如果您需要将模型元素添加到您的节点变量中,您可以这样做:
<script>
var nodes = @Html.Raw(Json.Encode(Model))
</script>
答案 1 :(得分:0)
您可以使用以下代码来实现此目的。
var nodes = function () {
var array = [];
@for(int i = 0; i < 5; i++) {
<text>
array.push({"name": "@ViewBag.Users[i].Name", "group": "@ViewBag.Users[i].Group"})
</text>
}
return array;
}
尝试使用<text></text>
参考: How can a razor for loop be used in a javascript script tag?
答案 2 :(得分:0)
您可以将用户列表序列化为JSON对象。我认为这就是你想要得到的结果。这是最简单的方式。
ViewBag.Users = JsonConvert.SerializeObject(users);
我已经用你的例子创建了一个.net小提琴。请检查HERE。
您需要为此代码添加Newtonsoft.Json NuGet包。如果您不想使用此软件包,可以使用JavaScriptSerializer.Serialize
System.Web.Scripts.Serialization中的方法。点击here了解详情。
答案 3 :(得分:0)
var nodes = JSON.stringify(@ Html.Raw(Json.Encode(ViewBag.Users)));