【问题标题】:send FormData with two files and text to controller将带有两个文件和文本的 FormData 发送到控制器
【发布时间】:2021-02-27 13:52:00
【问题描述】:

我正在尝试将包含一些文本字段、图像文件和 pdf 文件的 FormData 对象发送到控制器中的操作。但它免费将表单数据发送到操作。在浏览器中调试不会显示任何错误或任何东西。请指导我错过了什么或做错了什么。

html

<form>
    <input type="text" id="title" placeholder="Title" />
    <br />
    <br />
    <input type="text" id="auth" placeholder="Author" />
    <br />
    <br />
    <input type="text" id="dept" placeholder="Department" />
    <br />
    <br />
    <input type="text" id="price" placeholder="Price" />
    <br />
    <br />
    <input type="text" id="year" placeholder="Year published" />
    <br />
    <br />
    <label for="jpg">Select JPEG for Cover photo</label>
    <input type="file" id="jpg" />
    <br />
    <br />
    <label for="pdf">Select PDF</label>
    <input type="file" id="pdf" />
    <br />
    <br />
    <button type="submit" onclick="uploadbookfunc()">Submit</button>
</form>

这里是javascript

function uploadbookfunc() {
    var title = document.getElementById("title").value;
    var author = document.getElementById("auth").value;
    var department = document.getElementById("dept").value;
    var price = document.getElementById("price").value;
    var yearpub = document.getElementById("year").value;
    const img = document.getElementById('jpg').files[0];
    const pdffile = document.getElementById('pdf').files[0];

    var formData = new FormData();
    formData.append("Title", title);
    formData.append("Author", author);
    formData.append("Department", department);
    formData.append("Price", price);
    formData.append("YearPublished", yearpub);
    formData.append("ImageFile", img);
    formData.append("PdfFile", pdffile);

    //console.log(formData);
    $.ajax({
        url: "/Upload?handler=BookUpload",
        type: 'POST',
        contentType: false,
        processData: false,
        data: formData,
        success: function (response) {
            alert(response);
        },
        failure: function (response) {
            alert('failed');
        }
    });
         
}

这里是Action方法

public class UploadModel : PageModel
{
    public void OnGet()
    {
    }

    public IActionResult OnPostBookUpload()
    {            
        MemoryStream stream = new MemoryStream();
        Request.Body.CopyTo(stream);
        stream.Position = 0;
        using (StreamReader reader = new StreamReader(stream))
        {
            string requestBody = reader.ReadToEnd()
            // Write to database.....
        }
           
        return new JsonResult("Success");
    }
}

这是模型

public class UploadBook
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public string Department { get; set; }
    public double Price { get; set; }
    public int YearPublished { get; set; }        
    public IFormFile ImageFile { get; set; }
    public IFormFile PdfFile { get; set; }
}

【问题讨论】:

    标签: javascript c# ajax asp.net-core multipartform-data


    【解决方案1】:

    根据您的代码,您似乎想要发出 AJAX 请求,将带有其他数据的文件上传到 ASP.NET Core Razor 页面处理程序方法。

    要实现它,你可以尝试修改代码如下。

    在 Upload.cshtml 中

    <form>
        <input type="text" id="title" placeholder="Title" />
        <br />
        <br />
        <input type="text" id="auth" placeholder="Author" />
        <br />
        <br />
        <input type="text" id="dept" placeholder="Department" />
        <br />
        <br />
        <input type="text" id="price" placeholder="Price" />
        <br />
        <br />
        <input type="text" id="year" placeholder="Year published" />
        <br />
        <br />
        <label for="jpg">Select JPEG for Cover photo</label>
        <input type="file" id="jpg" />
        <br />
        <br />
        <label for="pdf">Select PDF</label>
        <input type="file" id="pdf" />
        <br />
        <br />
        <button type="submit" onclick="uploadbookfunc()">Submit</button>
    </form>
    @Html.AntiForgeryToken()
    
    @section scripts{
        <script>
            function uploadbookfunc() {
                //prevent it from submitting the form
                event.preventDefault();
    
                var title = document.getElementById("title").value;
                var author = document.getElementById("auth").value;
                var department = document.getElementById("dept").value;
                var price = document.getElementById("price").value;
                var yearpub = document.getElementById("year").value;
                const img = document.getElementById('jpg').files[0];
                const pdffile = document.getElementById('pdf').files[0];
    
                var formData = new FormData();
                formData.append("Title", title);
                formData.append("Author", author);
                formData.append("Department", department);
                formData.append("Price", price);
                formData.append("YearPublished", yearpub);
                formData.append("ImageFile", img);
                formData.append("PdfFile", pdffile);
    
                //console.log(formData);
                $.ajax({
                    url: "/Upload?handler=BookUpload",
                    type: 'POST',
                    headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
                    contentType: false,
                    processData: false,
                    data: formData,
                    success: function (response) {
                        alert(response);
                    },
                    failure: function (response) {
                        alert('failed');
                    }
                });
    
            }
        </script>
    }
    

    在 Upload.cshtml.cs 中

    public class UploadModel : PageModel
    {
        [BindProperty]
        public UploadBook uploadBook { get; set; }
        public void OnGet()
        {
        }
    
        public IActionResult OnPostBookUpload()
        {
            //code logic here
            var title = uploadBook.Title;
            //...
    
            return new JsonResult("Success");
        }
    }
    

    测试结果

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 2018-11-14
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多