代码之家  ›  专栏  ›  技术社区  ›  Nathan Goings

HttpPostedFileBase在文件上载时始终为空,模型绑定错误

  •  2
  • Nathan Goings  · 技术社区  · 6 年前

    我正试图通过JQuery Ajax将文件上传到一个ASP.NET核心MVC应用程序。

    这个 HttpPostedFileBase null . 当我把它作为参数直接放在操作中时,我得到一个模型绑定错误。

    Javascript代码:

    $(document).on('click', '#attachItemBtn', function () {
        var attachItemFiles = document.getElementById('attachItemFile');
    
        var formData = new FormData();
        formData.append("Document", attachItemFiles.files[0]);
        formData.append("Id", 1234);
        formData.append("FileName", "test");
    
        $.ajax({
            cache: false,
            type: "POST",
            data: formData,
            processData: false,
            contentType: 'multipart/form-data',
            url: App.Urls.AddAttachment,
            success: function (data) {
                App.Messages.showErrorMessage('Item attached');
            },
            error: function (xhr, ajaxOptions, thrownError) {
                App.Messages.showErrorMessage('Error Occured While attaching document');
            }
        });
    
        var debug = 0;
    });
    

    [HttpPost]
    public IActionResult AddAttachment(AttachmentItemModel model)
    {
        var count = HttpContext.Request.Form.Files.Count;
        int i = 0;
        return Json("done");
    }
    

    型号:

    public class AttachmentItemModel
    {
        public int Id { get; set; }
        public HttpPostedFileBase Document { get; set; }
        public string FileName { get; set; }
    }
    

    HttpContext.Request.Form.Files 但是 model.Document 无效的

    public IActionResult AddAttachment(int Id, string FileName, System.Web.HttpPostedFileBase Document)
    

    然后我得到以下错误:

    InvalidOperationException:无法创建类型为的实例 抽象或值类型,并且必须具有无参数构造函数。

    我错过了什么? 我希望将文件绑定到我的模型中,而不是使用 HttpContext.Request.Files .

    1 回复  |  直到 6 年前
        1
  •  4
  •   Chris Pratt    6 年前

    你怎么会 HttpPostedFileBase 要解决?无论如何,它不存在于ASP.NET内核中。相反,你应该使用 IFormFile .