将对象从JavaScript传递到C#

时间:2015-07-24 21:22:26

标签: javascript c# razor

晚上好, 现在我有一个用C#编写的后端项目。我正在尝试将其连接到前端JavaScript代码。我的js文件中的方法:

var people = [{name: "Sam", age: 40}, {name: "Vivian", age: 20}]    
foo = function () {
            var url = "/api/folder/foo";
            $http({
                method: 'GET', url: url, params: {
                    version: "7.1",
                    ppl: people  <---- the passing that causes error
                }
            }).success(function (data, status, header, config) {
                console.log("success!");
            }).error(function (data, status, header, config) {
                alert("server error");
            });
        };

这是调用C#代码:

    [HttpPost]
    [ActionName("foo")]
    public List<LoopItem> foo(String version, List<Person> ppl){
        System.Diagnostics.Debug.WriteLine("Success!");
        return repository.foo( version, ppl);
    }

正如您所看到的,我的C#代码将参数作为字符串和Person of List,这是一个简单的对象:

public class Person
{
    public String name { get; set; }
    public Int32 age { get; set; }
}

虽然在我的js代码中我试图模仿C#类Person,并创建了一个具有相同键的对象列表,但C#函数似乎不会将传递的对象列表识别为Person的列表。结果,没有任何调试成功&#34;得到印刷。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

使用JSON编码/解码。

var people = [{name: "Sam", age: 40}, {name: "Vivian", age: 20}]    
foo = function () {
            var myJsonPeople = JSON.stringify(people);
            var url = "/api/folder/foo";
            $http({
                method: 'POST', url: url, params: {
                    version: "7.1",
                    ppl: myJsonPeople <---- the passing that causes error
                }
            }).success(function (data, status, header, config) {
                console.log("success!");
            }).error(function (data, status, header, config) {
                alert("server error");
            });
        };

在服务器端,您需要以json的形式接收此数据,然后将其转换为对象列表。

[HttpPost]
public string foo(string jsonList)
{
     //Convert string to JSON object
     //Foreach loop for conversion to objects
}

答案 1 :(得分:0)

您的C#控制器看起来希望POST请求(来自[HttpPost]属性)而不是GET请求。您需要相应地更改您的JavaScript请求。

看起来像有角度的$http服务。所以这应该有效:

var url = "/api/folder/foo";
var params = {
                   version: "7.1",
                   ppl: people  
             };
$http.post(url, params)
    .success( //etc 

这使用$http.post,这是发出POST请求的快捷方式。