Javascript 如何使用Controller中的对象创建js
在我的实际任务中,我需要为基于ASP.NET MVC的应用程序创建图形。 我找到了合适的js,但我遇到了一个问题:如何从控制器中创建的值创建js对象。 例如:Javascript 如何使用Controller中的对象创建js,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,在我的实际任务中,我需要为基于ASP.NET MVC的应用程序创建图形。 我找到了合适的js,但我遇到了一个问题:如何从控制器中创建的值创建js对象。 例如: public class User { public string Name { get; set; } public string Group { get; set; } } public ActionResult Index() { List<User> users = new
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();
}
我想创建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;
};
var节点=函数(){
var数组=[];
对于(var i=0;i<@ViewBag.Users.Count;i++){
array.push({“name”:@ViewBag.Users[i].name,“group”:@ViewBag.Users[i].group})
}
返回数组;
};
注意:由于
i
不存在,此代码不起作用。您可以使用以下代码来实现此目的
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;
}
var节点=函数(){
var数组=[];
@对于(int i=0;i<5;i++){
array.push({“name”:“@ViewBag.Users[i].name”,“group”:“@ViewBag.Users[i].group”})
}
返回数组;
}
试着用
参考:您可以将用户列表序列化为JSON对象。我想这就是你想要得到的结果。这是最简单的方法
ViewBag.Users = JsonConvert.SerializeObject(users);
我用你的例子创建了一个.net小提琴。请检查一下
对于这段代码,您需要包含Newtonsoft.Json NuGet包。如果您不想使用此软件包,可以使用JavaScriptSerializer.Serialize
方法从System.Web.Scripts.Serialization。点击查看更多信息。我认为有更好的方法解决您的问题。您正在询问如何从视图中的控制器传递值。您的方法可以工作,但将对象作为视图的模型传递要简单得多。 返回View()时,需要传递包含列表的对象。 这样地:
返回视图(用户)代码>
然后,在您的视图中,您需要注册您的模型
@model IEnumerable()
之后,使用简单的foreach
可以迭代模型并显示值:
@foreach(var item in Model){
//do whatever you want with the item
}
如果需要将模型元素添加到节点变量中,可以这样做:
<script>
var nodes = @Html.Raw(Json.Encode(Model))
</script>
var节点=@Html.Raw(Json.Encode(模型))
var nodes=@Html.Raw(Json.Encode(ViewBag.Users))
(请注意,如果您希望在javascript对象中使用小写形式,则您的属性名称需要小写)。我建议您发出ajax请求,并将这些用户作为Json对象。谢谢。它对我有用。但使用ViewBag的原因是,我不仅需要js代码中的用户列表,还应该添加一个解释,说明所显示的代码如何回答这个问题。看看其他答案,从中可以得到一些关于如何做到这一点的启示。
<script>
var nodes = @Html.Raw(Json.Encode(Model))
</script>
var nodes= JSON.stringify(@Html.Raw(Json.Encode(ViewBag.Users)));