Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 将带有字符串的json数组发布到Asp.Net MVC操作控制器始终为空_Asp.net Mvc_Json_Binding_Model - Fatal编程技术网

Asp.net mvc 将带有字符串的json数组发布到Asp.Net MVC操作控制器始终为空

Asp.net mvc 将带有字符串的json数组发布到Asp.Net MVC操作控制器始终为空,asp.net-mvc,json,binding,model,Asp.net Mvc,Json,Binding,Model,我无法让Asp.NETMVC绑定作为json对象发送的字符串列表,除非我将它们封装在类中。我很难相信必须这样包装这份清单。几个小时以来,我一直在看各种各样的例子,但找不到其他可行的解决方案。我错过了什么?工作和非工作代码如下 $.ajax({ type: "POST", traditional: true, url: "keyapi/activate.json", data: JSON.stringify({ "keys": [ "

我无法让Asp.NETMVC绑定作为json对象发送的字符串列表,除非我将它们封装在类中。我很难相信必须这样包装这份清单。几个小时以来,我一直在看各种各样的例子,但找不到其他可行的解决方案。我错过了什么?工作和非工作代码如下

$.ajax({
        type: "POST",
        traditional: true,
        url: "keyapi/activate.json",
        data: JSON.stringify({ "keys": [ "1", "2" ] }),
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            alert(data);
    }
});
使用动作控制器时,如下面的“键”将为空

[HttpPost]
public Response<List<string>> ActivateKeys(List<string> keys)
{
    return KeyService.ActivateKeys(test.Keys);
}
[HttpPost]
公共响应激活键(列表键)
{
返回KeyService.ActivateKeys(test.Keys);
}
如果我添加一个类来包装列表,它就会工作。我是被迫这样做的,还是我遗漏了什么?下面的代码使用相同的jquery post代码工作

[HttpPost]
public Response<List<string>> ActivateKeys(Test test)
{
    return KeyService.ActivateKeys(test.Keys);
}
public class Test
{
    List<string> Keys { get; set; }
}
[HttpPost]
公众响应激活键(测试)
{
返回KeyService.ActivateKeys(test.Keys);
}
公开课考试
{
列出键{get;set;}
}
我建议两件事

1) 替换


ActivateKeys(IList键)//你的第一个建议产生了奇迹。不需要使用接口。因此,不需要将数组映射到参数名。这是为什么?因为mvc引擎将尝试将确切的json对象转换为方法参数,如果您添加一个额外的级别来定义
,它将假定这是参数属性,而不是参数的名称。
data: JSON.stringify({ "keys": [ "1", "2" ] }),
data: JSON.stringify([ "1", "2" ] ), // <-- Send the array directly
ActivateKeys(List<string> keys)
ActivateKeys(IList<string> keys) // <-- Use interface IList<T>