如何将 Javascript 数组发布到 C# 元组列表?

Ria*_*ert 7 javascript c# arrays asp.net-mvc jquery

我想知道是否有人知道如何将对象的 Javascript 数组传递给接受元组数组的 MVC 操作方法。

例子:

Javascript:

var objectArray = 
[
    { id: 1, value: "one" },
    { id: 2, value: "two" }
];

$.post('test',objectArray);
Run Code Online (Sandbox Code Playgroud)

MVC 控制器动作:

public JsonResult Test((int id, string value)[] objectArray)
{
    return Json(objectArray != null);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我给出的示例总是返回 false,因为 C# 代码中的 objectArray 为空。

Mih*_*nut 6

您不能这样做,因为就像错误所说:元组没有无参数构造函数,因此模型绑定器无法实例化它。

此外,您还可以阅读有关模型绑定的更多信息。

其中有一句话是这么说的:

为了发生绑定,类必须有一个公共默认构造函数,并且要绑定的成员必须是公共可写属性。当模型绑定发生时,类将仅使用公共默认构造函数实例化,然后可以设置属性。

您可以使用另一种方法:

首先,您必须使用方法发送给定的数组JSON.stringify

JSON.stringify()javascript对象转换为json文本并将其存储在string.

阿贾克斯

objectArray = JSON.stringify({ 'objectArray': objectArray });
$.ajax({
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: 'POST',
    url: 'test',
    data: objectArray ,
    success: function () {          

    }
});
Run Code Online (Sandbox Code Playgroud)

在服务器端方法中,您必须传递对象列表作为参数。

[HttpPost]
public void PassThings(List<Thing> objectArray )
{

}

public class Thing
{
    public int Id { get; set; }
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 这很不幸,但可能是最好的,谢谢! (2认同)