【问题标题】:How to receive multiple Data in controller side using FormData(Ajax)?如何使用 FormData(Ajax) 在控制器端接收多个数据?
【发布时间】:2017-09-26 19:00:12
【问题描述】:

我的 ajax 使用了 FormData 并在单个 (FormData) 对象中附加了多个字段值(如文本框、标签、文件)。我已经在服务器端发布了这些数据,但是

如何在控制器中接收相同的数据对象?

FormData 变量:

var uploadFile = new FormData();
        var files = $("#UploadFile").get(0).files;
        if (files.length > 0) {
            uploadFile.append("Doc", files[0]);
        }
  FileUpload(uploadFile);

Javasacript 方法 Ajax 调用:

 function FileUpload(uploadFile)
{
    var url = '@Url.Action("UploadCsvFile")';

    $.ajax({
        url:url,
        contentType: false,
        processData: false,
        data:uploadFile,
        type: 'POST',
        success: function () {
            alert("Successfully Added & processed");

        }
    });

我的问题是....如果我的 ajax 有更多数据,如何在控制器端接收相同的数据以及什么,如果我想使用特定的数据对象。

【问题讨论】:

    标签: ajax asp.net-mvc-4 form-data


    【解决方案1】:

    您可以收到相当复杂的自定义表单

    它将分两部分工作:

    第 1 部分 - 扩展 html FormData:

    uploadFile.append("TextData", "This is my text data");
    

    第 2 部分 - 扩展您的控制器:

    我假设你的模型看起来像这样:

    public class MyModel
    {
         public HttpPostedFileBase Doc{ get; set;}
    }
    

    现在只需将您的自定义数据添加到其中:

    public string TextData {get;set;}
    

    在你的控制器方法中:

    public JsonResult MyUploadMethod(MyModel model)
    {
        /*From here you will have access to the file and the text data*/
    }
    

    希望对您有所帮助。如果您需要帮助,可以问我任何问题。

    【讨论】:

    • 这是一个非常有帮助的答案,我会毫不犹豫地实施这个
    • 请随时编辑您的问题并提供更多详细信息,或者如果您的问题已解决,请将其标记为答案。
    • 我对这个答案一无所知。在Controller方法中,变量“model”不应该叫“Doc”吗?我有这个问题,无法让 FormData 中的文件被任何名称识别。我不能只接收它有 Request.Files["name"],但是我之前做了一个 ModelState.IsValid,并且因为无法在 MyModel var 中接收文件而无法做到...
    • 回答你的问题,不。您发送的模型应该称为模型,然后模型上的两个属性将分别称为 Doc 和 TextData: var model = {"Doc" : document, "TextData" : "My Text data"}
    猜你喜欢
    • 2017-01-20
    • 2016-10-17
    • 2014-05-16
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多