如何将List从C#angular传递给Angular控制器?

时间:2015-02-25 14:21:29

标签: javascript c# asp.net asp.net-mvc angularjs

我对Angular很新,我试图在我的.NET MVC应用程序中实现它,但我一直难以理解如何从我的C#发送数据。在我以前的应用程序中,我使用SignalR进行所有客户端 - 服务器通信,我可以无需将字符串化,序列化或反序列化从服务器无缝地返回到客户端。我认为使用Angular它不是那容易吗?例如,我有服务器端方法:

    [HttpGet]
    public int TestInt() { return 42; }

    [HttpGet]
    public string TestString() { return "hooray"; }

    [HttpGet]
    public List<int> TestList() { return new List<int> {0, 1, 2, 3, 4};}

然后在我的Angular控制器中,我有一个使用$ http.get来调用这些方法的函数

 $http.get('/UserRequest/TestInt').success(function (data) { var x = data; });

 $http.get('/UserRequest/TestString').success(function (data) {var y = data; });

 $http.get('/UserRequest/TestList').success(function (data) {var z = data;});

现在前两个工作有点像预期的那样(虽然TestInt将值作为字符串而不是int返回),但是最后一个只返回&#34; System.Collections.Generic.List`1 [System.Int32 ]&#34 ;.

我应该怎么做才能通过$ http.get将列表传递给angular?如果它是我自己的自定义对象怎么办?仍然只是使用SignalR来获取数据,然后使用Angular来调用SignalR方法是明智的吗?

3 个答案:

答案 0 :(得分:2)

如果您不使用WebApi而只使用普通的ASP.NET MVC,则可能需要执行以下操作

public JsonResult TestList()
{
    return this.Json(new List<int> { 1, 2, 3 });
}

答案 1 :(得分:0)

在angularjs控制器中,您必须在成功事件中调用角度服务,您可以将数据存储到范围

    app.controller('mycontroler',['$scope','$http', function($scope,$http){

    $http.get('/UserRequest/TestInt').success(function (data) {


    $scope.data= data; //this scope object we can access in html
    });


}]) 

答案 2 :(得分:0)

那是因为在ASP.NET MVC中,当你简单地返回一个类型,它从ActionResult继承了框架&#34; stringfies&#34;它通过执行ToString()方法。

您可以使用JsonResult(最佳选项),也可以像这样序列化自己:

return Newtonsoft.Json.JsonConvert.SerializeObject(new List<int>() { 2, 3, 4, 5, 5 }) 

(返回一个字符串)