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

Posted

技术标签:

【中文标题】如何将 Javascript 数组发布到 C# 元组列表?【英文标题】:How to post Javascript array to C# list of tuples ? 【发布时间】:2018-06-26 08:15:51 【问题描述】:

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

例子:

Javascript:

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

$.post('test',objectArray);

MVC 控制器动作:

public JsonResult Test((int id, string value)[] objectArray)

    return Json(objectArray != null);

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

【问题讨论】:

你不能使用正确的类有什么原因吗?这并不是 Tuples 的真正目的。 @freedomn-m 没有理由,只是好奇。 @freedomn-m,是的,元组不是为此而设计的。另外,模型绑定不能映射到一个Tuple 【参考方案1】:

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

此外,您还可以阅读有关Model Binding 的更多信息。

其中一句话是这样说的:

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

您可以使用另一种方法:

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

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

AJAX

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

    
);

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

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




public class Thing

    public int Id  get; set; 
    public string Value  get; set; 

【讨论】:

谢谢,这是一种方法,但它不能回答我的问题。我特别想看看是否有可能接收元组数组。 @RianMostert,然后试试这个:public void PassThings(List&lt;Tuple&lt;int, string&gt;&gt; objectArray ) 恐怕这行不通。 “没有为此对象定义无参数构造函数。对象类型'System.Tuple'...” 您何时收到此类错误?编译时还是运行时? 这很不幸,但可能是最好的,谢谢!

以上是关于如何将 Javascript 数组发布到 C# 元组列表?的主要内容,如果未能解决你的问题,请参考以下文章

将数组从 JavaScript 传递到 C# 的最佳方法?

将列表项从 c# 传递到 javascript 数组

Javascript:将数组选择到新数组中(如 C# Select)

如何将c#中的List转换为javascript中的数组并检查数组项

如何将 C# List<string[]> 转换为 Javascript 数组?

将 C# ASP.NET 数组传递给 Javascript 数组