代码之家  ›  专栏  ›  技术社区  ›  Bluemarble

在中上载Ajax文件。Net 6 Razor页面在代码后台发送Null

  •  0
  • Bluemarble  · 技术社区  · 3 年前

    已尝试 This Answer 但它没有起作用。所以寻求帮助。

    我有一个。Net 6 Razor页面,我正试图从那里上传一个文件。

    这是我的 AjaxFileUpload。CSHtml

    <h3>Ajax File Upload</h3>
    
     <form method="post">
        <div class="mb-3">
          <label for="formFile" class="form-label">Select File 1</label>
          <input class="form-control" type="file" id="formFile1">
          <br/>
          <button type="button" class="btn btn-info" onclick="UploadFile1ViaAjax()">Upload File 1</button>
          <span id="File1UploadStatus"></span>
        </div>
    </form>
    

    Ajax调用

    <script>
                
    function UploadFile1ViaAjax()
    {          
       var file1 = $('#formFile1').prop("files")[0];
       
       var url = "/Employees/AjaxFileUpload?handler=UploadFile1";
       formData = new FormData();
       formData.append(file1.name, file1);
    
       alert("Uploading file 1 : " + file1.name);
    
       $.ajax({
            type: "POST",
            url: url,
            contentType: 'multipart/form-data',
            contentType: false,
            processData: false,            
            data: formData, 
            headers: {
                RequestVerificationToken:
                    $('input:hidden[name="__RequestVerificationToken"]').val()
            },
            success: function (result) {
                alert("success: " + JSON.stringify(result));
            },
            failure: function (result) {
                alert("failure");
            },
            error: function (result) {
                alert("error");
            },
            }).done(function (result) {
                    alert("ajax call complete.");
        });       
        
    }   
    
    </script>
    

    最后是方法背后的代码 AjaxFileUpload。CSHtml.cs

        public IActionResult OnPostUploadFile1(IFormFile formData)
        {
            if (formData != null)
            {               
                return new ObjectResult(new { status = "success" });
            }
            return new ObjectResult(new { status = "fail" });
        }
    

    当我上传一个文件并单击按钮时,ajax调用有效,调试器在代码隐藏方法中被击中,但问题是 IFormFile 对象总是为null。

    为什么会发生这种情况?我怎样才能拿到 IFormFile 用我正在上传的文件数据填充的对象?

    1 回复  |  直到 3 年前
        1
  •  0
  •   Roe    3 年前

    问题是因为C#端点内的参数名称与ajax调用不匹配。尝试设置 formdata.append("fileName", file) 并调用端点fileName中的参数。另一方面,你应该通过提交表格上传。或者以base64上传文件