如何使用Controller中的对象创建js

时间:2018-02-16 08:38:06

标签: javascript c# asp.net-mvc

在我的实际任务中,我需要基于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不存在,此代码无效。

4 个答案:

答案 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>

围绕您的js

参考: 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)));