Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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
C# 数据类型为JSON的ajax post调用操作时,ASP.NET Core 2.2中的数据未成功绑定_C#_Json_Asp.net Core_Asp.net Core 2.2 - Fatal编程技术网

C# 数据类型为JSON的ajax post调用操作时,ASP.NET Core 2.2中的数据未成功绑定

C# 数据类型为JSON的ajax post调用操作时,ASP.NET Core 2.2中的数据未成功绑定,c#,json,asp.net-core,asp.net-core-2.2,C#,Json,Asp.net Core,Asp.net Core 2.2,我检查了许多其他人发布的类似问题,并尝试了不同的解决方案,但没有成功 我有一个asp.net core 2.2 web应用程序(控制器,而不是rest api),并在启动时添加了json格式化程序的配置: AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver()); 在我看来,我这样做: function crearObjetoTramiteR

我检查了许多其他人发布的类似问题,并尝试了不同的解决方案,但没有成功

我有一个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;
[HttpPost]
[ValidateAntiForgeryToken]
公共JsonResult Crearequisitos(列表请求数据)
{
int x=0;
requestData参数包含0个元素


无论我使用[FromBody]param属性还是使用数组JSON对象而不是字符串化它们,都不起作用,也不要使用contentType:“application/JSON;charset=utf-8”

将此更改为
数据:{'requestData':JSON.stringify(requestData)}

数据:{JSON.stringify(requestData)}

ContentType
是请求数据类型,
dataType
是响应数据类型,您可以参考his

数据的格式应该是
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);
}

@节脚本{
函数crearObjetoTramiteRequisito(){
var tramitesRequisitos=[];
push({Id:0,TramiteDocumentoId:1,TramiteGeneralId:1});
push({Id:0,TramiteDocumentoId:2,TramiteGeneralId:1});
控制台日志(tramitesRequisitos);
回程电车;
}
函数GuardRamiteRequisitos(){
var requestData=crearObjetoTramiteRequisito();
$.ajax({
url:“@url.Action(“crearequisitos”,“ConfiguracionTramitesGenerales”)”,
键入:“POST”,
contentType:'application/json;charset=utf-8',
数据类型:“json”,
数据:JSON.stringify(requestData),
成功:功能(结果){
控制台日志(结果);
},
错误:函数(e){
控制台日志(e);
}
});
}
}
控制器:

<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);
}
[HttpPost]
公共JsonResult Crearequisitos([FromBody]列表请求数据)
{
返回Json(requestData);
}
结果:


您在浏览器中检查了ContentType吗?应该是
ContentType:“application/json;charset=utf-8”
我使用它但没有成功,因为ContentType是从服务器到客户端的响应数据类型。我编辑了文章。