asp.net-mvc - 将带有字符串的 json 数组发布到 Asp.Net MVC Action Controller 始终为空

标签 asp.net-mvc json binding model

我无法让 Asp.Net MVC 绑定(bind)作为 json 对象发送的字符串列表,除非我将它们包装在一个类中。我很难相信这样包装 list 是必须的。一直在查看各种示例,而不是几个小时,但无法获得任何其他解决方案。我错过了什么?下面的工作和非工作代码。

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

当使用 Action Controller 时,例如“键”下面的 Controller 将为空。
[HttpPost]
public Response<List<string>> ActivateKeys(List<string> keys)
{
    return KeyService.ActivateKeys(test.Keys);
}

如果我添加一个类来包装列表,它就可以工作。我是被迫这样做,还是我在这里遗漏了什么?下面的代码工作,使用相同的 jquery 邮政编码。
[HttpPost]
public Response<List<string>> ActivateKeys(Test test)
{
    return KeyService.ActivateKeys(test.Keys);
}
public class Test
{
    List<string> Keys { get; set; }
}

最佳答案

我建议两件事

1) 更换

data: JSON.stringify({ "keys": [ "1", "2" ] }),

经过
data: JSON.stringify([ "1", "2" ] ), // <-- Send the array directly

这样做你将传递一个数组作为参数,而不是一个包含名为 keys 的数组属性的对象。

2)如果单独以前的建议不起作用,请更换
ActivateKeys(List<string> keys)

经过
ActivateKeys(IList<string> keys) // <-- Use interface IList<T>

因为不是 100% 确定 mvc 引擎是否能够解析为 List<string>

关于asp.net-mvc - 将带有字符串的 json 数组发布到 Asp.Net MVC Action Controller 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910288/

相关文章:

asp.net-mvc - 如何在 MVC 3 中显示 JSON 图像?

asp.net - 在 ASP.NET MVC 中构建自定义授权

javascript - 尝试访问 json 响应时出现“未定义”

c# - XAML 中的 WPF ListView 绑定(bind) ItemsSource

cocoa - 绑定(bind)枚举属性最简洁的方法是什么?

asp.net-mvc - Jquery Ajax后有时会转向获取MVC

c# - 将模型属性表达式传递给 View

android - 解析从 .NET Web 服务返回的 JSONArray 时出错

python - (Pyrebase) 错误 : orderBy must be a valid JSON encoded path

c# - 如何在 WPF 中绑定(bind)单个对象实例?