如何将列表从C#angular传递到angular控制器

How do I pass a List from C# angular to Angular controller?

本文关键字:angular 控制器 C#angular 列表      更新时间:2024-05-06

我对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的形式返回值),但最后一个只返回"System.Collections.Generic.List`1[System.Int32]"。

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

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

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

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

    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
    });

}]) 

这是因为在ASP.NET MVC中,当您简单地返回一个没有从ActionResult继承的类型时,框架通过执行ToString()方法来"字符串化"它。

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

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

(返回字符串)