从ASP .NETMVC到. NETCore,事情似乎变得更加复杂,因为我不能再使用 AJAX 轻松地将对象列表发送到控制器。请指出我做错了什么。
在我的控制器中,我有这个方法:
[HttpPost("EditMultipleResults")]
[Consumes("application/x-www-form-urlencoded")]
public bool EditMultipleResults([FromForm] List<Result>, [FromForm] string comment)
{
// do something...
return true;
}
此处定义结果
public class Result
{
[Key]
public long taskcd { get; set; }
public long Runno { get; set; }
public string Workorder {get; set;}
}
在我的JS AJAX 中,我有:
var results = [
{taskcd: 123,
Runno: 187776876,
Workorder: 'VA1234567'
},
{taskcd: 642,
Runno: 187776877,
Workorder: 'VA1234569'
},
{taskcd: 766,
Runno: 187776876,
Workorder: 'VA1234564'
}
];
var posteddata = {
results: results,
comment: 'test comment'
};
// call the controller
$.ajax({
type: 'POST',
data: posteddata,
traditional: true,
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
url: 'api/ResultsEditor/EditMultipleResults',
success: function () {
deferred.resolve();
},
error: deferred.reject
});
return deferred.promise();
我的问题是结果列表和原因在控制器中为空。在.NET核心5中传递对象列表到控制器有什么技巧吗?谢谢!
另一个问题:有没有办法在开发工具中看到传递给控制器的数据?
2条答案
按热度按时间kr98yfug1#
您不能多次使用[FromForm](以及[FromBody]),您的操作输入参数应该与ajax中的相同,因此您必须创建一个类
和行动
并且您不需要使用[Consumes("application/x-www-form-urlencoded")]、[FromForm]和contentType:'应用程序/x-www-格式-网址编码; charset = utf-8 ',因为默认情况下它们都已经是。
y3bcpkx12#
因为你是手工创建表单数据作为一个json对象,而不是发布一个html表单,所以你也需要手工将数据编码为x-www-form-urlencoded。
这个post有一些很好的建议。确保不仅仅阅读被接受的答案。