Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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# 从Ajax调用在Asp.NETCore中进行模型绑定_C#_Ajax_Asp.net Core_Model Binding - Fatal编程技术网

C# 从Ajax调用在Asp.NETCore中进行模型绑定

C# 从Ajax调用在Asp.NETCore中进行模型绑定,c#,ajax,asp.net-core,model-binding,C#,Ajax,Asp.net Core,Model Binding,我有一个Javascript函数,可以调用Asp.Net核心控制器: const details = { thisModel: { Id: '@Model.OrderId', Name: '@Model.Name', Data: data, StringData: '' } }; const data = JSON.stringify(

我有一个Javascript函数,可以调用Asp.Net核心控制器:

    const details =
    {
        thisModel: {
            Id: '@Model.OrderId',
            Name: '@Model.Name',
            Data: data,
            StringData: ''
        }
    };

    const data = JSON.stringify(details);

    $.ajax({                    
        type: "POST",
        url: "/Orders/CreateOrder",
        data: data,
        datatype: "json",
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            // Success!
        }
    });
我正在尝试调用Asp.Net核心控制器方法:

    [HttpPost]
    public async Task<IActionResult> CreateOrder([FromBody]OrderDetails orderDetails)
    {

我遇到的问题是,虽然确实调用了控制器方法,但orderDetails中的每个值都是null。我已经看过了,据我所知,我遵守了所有的规则,所以我有点不确定为什么数据没有被传递。有人能帮忙吗?

因为您的模型中有一个
ifformfile
属性,我知道您想将文件上载到API

这里的问题是,您不能在JSON中上载文件。这是HTTP协议的一个“限制”。要上载文件,您应该使用

假设您已经有了这样的html表单:

public class OrderDetails
{
    public string Id { get; set; }
    public string Name { get; set; }
    public IFormFile Data { get; set; }
    public string StringData { get; set; }
}

您的文件:
然后,您应该添加新的隐藏字段来存储
@Model.OrderId
@Model.Name


您的文件:
现在,在javascript代码中,您需要将表单输入转换为新的
FormData
变量,然后将其提交给api。最简单的方法是:

var form = $('#fileUploadForm')[0];

var data = new FormData(form);

$.ajax({                    
    type: "POST",
    url: "/Orders/CreateOrder",
    data: data,
    enctype: 'multipart/form-data', // Important!!!!
    processData: false,  //prevent jQuery transforming the data into a query string
    contentType: false,
    cache: false,
    success: function (data) {
        // Success!
    }
});

这确实解决了我的问题,所以谢谢你。但是,即使文件为空,我也会得到相同的行为。我将进行一些测试,以了解为什么即使文件为空,也会出现相同的行为。我不知道为什么会发生这种情况,但我相信这是因为您的模型中有一个文件,Asp.net模型绑定可能会首先验证它,而不绑定任何内容。或者因为我在删除的答案中说的话。无论如何,我很乐意提供帮助,并将深入了解Asp.Net模型绑定以了解这一点。