无法在ASP.NET中正确读取formData的服务器端

时间:2016-06-24 10:02:16

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

我使用JQuery Fileupload将视图中的文件上传到.NET中的服务器。我尝试在上传中添加其他信息,这些信息是页面中两个组合框的值。我跟着documentation并决定以编程方式在formData中添加我的组合框值。但是,它没有按预期工作。

这是我的fileuploader

$('#fileupload').fileupload({
  dataType: 'json',
  url: '/Home/UploadFiles',
  sequentialUploads: true,
  multipart: true,
  formData: { SectorCode: $('#comboSector').val(), AppName: $('#comboApp').val() },
  autoUpload: true,
  done: function (e, data) {
    $('.file_name').html(data.result.name);
    $('.file_type').html(data.result.type);
    $('.file_size').html(data.result.size);
  }
})

这是我的controller function

 [HttpPost]
    public ContentResult UploadFiles(string data)
    {
        string sector = Request.Form["SectorCode"];
        string app = Request.Form["AppName"];
    .....
    }

这里的问题是扇区和应用程序都返回null。但是,如果我选择通过{SectorCode: 3, AppName: myApp},我将拥有良好的服务器端值。这有什么不对?

编辑:

以下是我的相关HTML部分:

<input id="fileupload" type="file" name="files[]" multiple accept="application/pdf">

2 个答案:

答案 0 :(得分:0)

尝试以下操作,确保表单元素具有已定义的name属性:

string sector = Request.Form["comboSector"];
string app = Request.Form["comboApp"];

并完全跳过formData属性。

如果没有,请发布您的HTML吗?

答案 1 :(得分:0)

我建议使用以下用法。

你的Html,(注意文件输入名称。它应该在模型中匹配)

<select id="SectorCode" />
<select id="AppName"/>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files" multiple>

为您的行动创建模型

public class FormData
{
    public List<HttpPostedFileWrapper> files { get; set; }
    public string SectorCode { get; set; }
    public string AppName { get; set; }
}

并像这样定义你的控制器动作

[HttpPost]
public JsonResult UploadFiles(FormData data)
{
    ...
}

要附加其他表单数据,请使用fileuploadsubmit事件

$(function () {
    'use strict';
    // Change this to the location of your server-side upload handler:
    var url = '@Url.Action("Upload","Home")';
    $('#fileupload').fileupload({
        url: url,
        dataType: 'json',
        done: function (e, data) {
            // handle done event.
        },
    }).bind("fileuploadsubmit", function (e, data) {
        data.formData = {
            SectorCode: $("#SectorCode").val(),
            AppName: $("#AppName").val()
        };
    });
});