【问题标题】:POST a list of objects to MVC 5 Controller将对象列表发布到 MVC 5 控制器
【发布时间】:2015-07-09 08:09:27
【问题描述】:

我想将对象列表发布到 MVC 5 控制器,但只有 NULL 到达控制器方法。这篇文章:

$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    url: "../delikte",
    data: JSON.stringify({ "delikte" : delikte})
});

转到这个 MVC 5 控制器:

[HttpPost]
[Route(@"delikte")]
public void saveDelikte(List<Delikt> delikte)
{
  ... // delikte is null 
}

从 IE 调试工具中可以看出,POST 包含以下数据:

{"delikte":[{"VerfahrenId":"6","DeliktId":"4123"},{"VerfahrenId":"6","DeliktId":"4121"}]} 

并且应该转换成这个对象的List:

public class Delikt
{
    public int VerfahrenId { get; set; }
    public int DeliktId { get; set; }
}

我认为这可能是Delikt类中将VerfahrenId和DeliktId定义为int的问题,但是更改为字符串并没有改变问题。

我已阅读其他主题,但在那里找不到解决方案(我的帖子包括 dataType、contentType,发布的信息似乎格式正确)。我的错在哪里?

【问题讨论】:

    标签: jquery asp.net json asp.net-mvc


    【解决方案1】:

    我会尝试从您的 POST 数据中删除属性名称:

    $.ajax({
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        url: "../delikte",
        data: JSON.stringify(delikte)
    });
    

    明确指定值来自 POST 正文也可能会有所帮助:

    [HttpPost]
    [Route(@"delikte")]
    public void saveDelikte([FromBody]List<Delikt> delikte)
    {
        ... // delikte is null 
    }
    

    【讨论】:

    • 从 POST 数据中删除属性名称有效,非常感谢。我在搜索过的任何示例中都没有看到这一点。
    • 没问题,几年前我开始使用 Web API 时遇到了类似的问题。如果您可以将答案标记为已接受,那就太好了,谢谢。
    • 添加 [FromBody] 是唯一对我有用的方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2017-06-22
    • 1970-01-01
    • 2021-11-07
    • 2017-02-22
    • 1970-01-01
    • 2014-11-26
    • 2014-10-31
    相关资源
    最近更新 更多