C# 使用ajax和pass as模型使用.net核心MVC上载文件

C# 使用ajax和pass as模型使用.net核心MVC上载文件,c#,ajax,file,.net-core,asp.net-core-mvc,C#,Ajax,File,.net Core,Asp.net Core Mvc,我正在尝试使用.NETCore和MVCAJAX上传图像 这是我的代码 <form asp-action="AddImages" asp-controller="UserAdmin" data-ajax-begin="onBeginSubmit" data-ajax-complete="onComplete" data-ajax-failure="onFailed" data-ajax-success="

我正在尝试使用.NETCore和MVCAJAX上传图像

这是我的代码

<form asp-action="AddImages" asp-controller="UserAdmin"
                      data-ajax-begin="onBeginSubmit" data-ajax-complete="onComplete"
                      data-ajax-failure="onFailed" data-ajax-success="onSuccessSubmit"
                      data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data">
                                <input id="file-input-1" name="Image" type="file" class="uploadimg" data-id="1" accept=".jpg, .jpeg, .png" />

                    <div class="col-xs-12">
                        <button type="submit">Save</button>
                    </div>
                </form>

但是Image为空,model总是返回false

我自己也遇到了这个问题,似乎唯一的解决方法是使用“传统”ajax将表单发回控制器。我的方法如下:-

将Submit按钮替换为调用Ajax的普通按钮:

<input type="button" class="btn btn-default" value="Save" onclick="javascript:submitForm()" />

希望这能帮助别人。遗憾的是,新的“data ajax”表单标记似乎无法处理发回的文件。

在您的模型中,您有一个IFormFile列表,并且您正在传递一个IFormFile值。将图像的数据类型从列表更改为IFormFile,或使用第二个选项将html中输入的名称从图像更改为图像[0]。您的代码似乎没有问题。还有一件事你没有和我们分享。我尝试过在没有ajax的情况下工作”“ajax会有什么问题?可能是重复的
  [HttpPost]
        public bool AddImages(ImageModel Image)
        {
            if (!ModelState.IsValid)
            {
                return false;
            }
            return true;
        }
<input type="button" class="btn btn-default" value="Save" onclick="javascript:submitForm()" />
 function submitForm() {
    var formdata = new FormData($('#yourFormId').get(0));
    $.ajax({
        url: '@Url.Action("YourActionName", "YourControllerName")',
        type: 'POST',
        data: formdata,
        processData: false,
        contentType: false,
        success: function (data) {
            //rendering success
        },
        error: function (xhr, ajaxOptions, thrownError) {
            //rendering errors
        }
    });
}