【问题标题】:Uploading file AND text to server using Ajax in asp.net mvc在 asp.net mvc 中使用 Ajax 将文件和文本上传到服务器
【发布时间】:2016-04-02 04:06:47
【问题描述】:

问候。

我想使用 ajax 将图片连同描述一起上传到服务器。

文件上传工作正常,虽然我不知道如何提取输入的文本。

表格基本上是这样的:

<form id="uploader">
     <input id="fileInput" type="file" multiple>
     <input type="text" id="fileText" name="fileText" value=" " />
     <input type="submit" value="Upload file" />
</form>

上传到服务器的脚本如下所示:

document.getElementById('uploader').onsubmit = function () {
        var formdata = new FormData(); //FormData object
        var fileInput = document.getElementById('fileInput');
        //Iterating through each files selected in fileInput
        for (i = 0; i < fileInput.files.length; i++) {
            //Appending each file to FormData object
            formdata.append(fileInput.files[i].name, fileInput.files[i]);
        }
        //Creating an XMLHttpRequest and sending
        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/Controller/Action');
        xhr.send(formdata);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                alert(xhr.responseText);
            }
        }
        return false;
    }

在服务器端,在相关操作的控制器中:

public JsonResult Upload(){
     for (int i = 0; i < 9; i++){
           HttpPostedFileBase file = Request.Files[i]; //Uploaded files
           //Do stuff with uploaded files
     }            
}

我尝试过的:

  1. 将 Upload 方法更改为采用名为 fileText 的字符串参数。
  2. 更改了脚本以在 for 循环中使用这两行将文本附加到表单数据:

    var fileText = document.getElementById('fileText');

    formdata.append(fileText.value, fileText.value)

我可能在两次试验中都遗漏了一些东西,但我似乎无法弄清楚是什么。请帮忙!

问候, 克里斯

【问题讨论】:

    标签: asp.net ajax asp.net-mvc file-upload


    【解决方案1】:
    1. 将 Upload 方法更改为采用名为 fileText 的字符串参数。

    正确。

    1. 更改了脚本,以便在 for 循环中使用这两行将文本也附加到 formdata:

    不正确。您不应该在循环内执行此操作,因为您只有一个文本输入字段,因此您只能发送 1 个值。所以把这段代码移到循环之外。此外,您应该在附加到必须与您的控制器操作参数名称匹配的 FormData 时指定正确的名称:

    var fileText = document.getElementById('fileText');
    formdata.append('fileText', fileText.value);
    

    【讨论】:

    • 你完全正确。错误在于要附加的对象的名称。我完全错过了那部分。谢谢达林! PS。我在帖子上的错误,应该说是在循环之外。所以你在这方面也是正确的,它当然不应该在循环内。
    猜你喜欢
    • 2011-01-08
    • 2016-09-07
    • 1970-01-01
    • 2020-06-05
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多