javascript - 如何使用 jQuery 在 ASP.NET MVC 中上传文件?

标签 javascript jquery asp.net-mvc knockout.js form-data

我需要在 ASP.NET MVC 中上传文件。纯 javascript 代码有效(见下文),但如果我将发送部分转换为 jQuery,它会给我一个 jquery 错误(第 8458 行)。

错误:

0x8000fff - JavaScript runtime error: Argument not optional
code: 
8453 jQuery.param = function( a, traditional ) {
8454    var prefix,
8455        s = [],
8456        add = function( key, value ) {
8457            // If value is a function, invoke it and return its value
8458            value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
8459            s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
8460        };

html:
<form data-bind='submit: upload'>
  <input type='file' id='fileInput' />
  <input type='submit' value='upload' />
</form>

js:
that.upload = function(){
  var data = new FormData();
  var fileInput = $('#fileInput')[0];
  var file = fileInput.files[0];
  data.append(file.name, file);
  var url = 'blah/Upload?id=' + that.id();

  // this pure js works
  var xhr = new XMLHttpRequest();
  xhr.open('post', url);
  xhr.send(data);

  // this jquery code does NOT work
  $.ajax({
      type: 'post',
      dataType: json',
      url: url,
      data: data,
  });
};

Controller :
public JsonResult Upload(string id){
  return Json(JsonConvert.SerializeObject(true), JsonRequestBehavior.DenyGet);
}

最佳答案

您需要添加 2 个额外的 ajax 选项,processData: falsecontentType: false

$.ajax({
  type: 'post',
  dataType: json',
  url: url,
  data: data,
  processData: false, // add
  contentType: false, // add
  ....
});

旁注:您应该使用 Url.Action()确保您的网址正确生成
var url = '@Url.Action("Upload", "blah")',

并添加 id值为 FormData
data.append(id, that.id);

关于javascript - 如何使用 jQuery 在 ASP.NET MVC 中上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897882/

相关文章:

javascript - 如何在 JavaScript 中的 new Number() 中保留前导零

python - 根据阈值改变表格的颜色

javascript - 获取错误的字符jquery.min.js

c# - 无法从搜索页面删除记录

c# - 从 lambda 表达式访问属性的 HtmlHelper 方法之间的区别

javascript - JSDoc:如何在生成的文档中包含自定义 css 文件模板?

javascript - 如何从我点击的元素中选择内容(使用数据属性)

javascript - 需要js和加载脚本时间

javascript - 带有 $.post 请求 jQuery 到外部 PHP 的 406 响应

c# - PartialView 不会在 ajax 发布调用上更新模型