问题描述
我检查了许多其他问题的相似问题,并尝试了不同的解决方案,但均未成功。
我有一个asp.net core 2.2 Web应用程序(控制器,不是rest-api),我添加了用于启动json格式化程序的配置:
AddJsonoptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
在我的视图中,我这样做:
function crearObjetoTramiteRequisito() {
var tramiteGeneralId = retornarItemGridTramitesGenerales().Id;
var tramitesRequisitos = [];
$.each(arrayDocumentoSeleccionado,function (index,value) {
tramitesRequisitos.push({ Id: 0,TramiteDocumentoId: value,TramiteGeneralId: tramiteGeneralId});
});
return tramitesRequisitos;
}
function guardarTramitesRequisitos() {
onCloseWindowRequisitos();
var requestData = crearObjetoTramiteRequisito();
$.ajax({
url: "@Url.Action("CrearRequisitos","ConfiguracionTramitesGenerales")",type: 'POST',headers: {
"RequestVerificationToken": antiForgeryTokens()
},dataType: 'json',data: {'requestData': JSON.stringify(requestData) },success: function (result) {
console.log(result);
},error: function (e) {
console.log(e);
}
});
}
我希望控制器参数中包含一个JSON数组。
viewmodel:
public class TramiteRequisitoviewmodel
{
public int Id { get; set; }
public int TramiteDocumentoId { get; set; }
public int TramiteGeneralId { get; set; }
}
控制器为:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult CrearRequisitos (List<TramiteRequisitoviewmodel> requestData)
{
int x = 0;
requestData参数带有0个元素。
无论我使用[FromBody] param属性还是使用数组JSON对象而不是对它们进行字符串化,都不起作用,也不使用contentType:“ application / json; charset = utf-8”
解决方法
ContentType
是请求数据类型,dataType
是响应数据类型,可以引用他的link。
数据应为data: JSON.stringify(requestData)
一个简单的测试,如下所示:
脚本:
<button id="btn" onclick="guardarTramitesRequisitos()" value="Submit"></button>
@section scripts{
<script>
function crearObjetoTramiteRequisito() {
var tramitesRequisitos = [];
tramitesRequisitos.push({ Id: 0,TramiteDocumentoId: 1,TramiteGeneralId: 1 });
tramitesRequisitos.push({ Id: 0,TramiteDocumentoId: 2,TramiteGeneralId: 1 });
console.log(tramitesRequisitos);
return tramitesRequisitos;
}
function guardarTramitesRequisitos() {
var requestData = crearObjetoTramiteRequisito();
$.ajax({
url: "@Url.Action("CrearRequisitos","ConfiguracionTramitesGenerales")",type: 'POST',contentType:'application/json; charset=utf-8',dataType: 'json',data: JSON.stringify(requestData),success: function (result) {
console.log(result);
},error: function (e) {
console.log(e);
}
});
}
</script>
}
控制器:
[HttpPost]
public JsonResult CrearRequisitos([FromBody]List<TramiteRequisitoViewModel> requestData)
{
return Json(requestData);
}
结果:
,将此内容data: {'requestData': JSON.stringify(requestData) }
更改为data: { JSON.stringify(requestData) }