在MVC中如何通过jquery调用.ashx处理程序文件

时间:2014-06-06 07:17:14

标签: jquery asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

在mvc中,我需要通过jquery调用.ashx处理程序文件。

我尝试了bleow代码

 $("#btnUpload").click(function (evt) {

    var fileUpload = $("#file1").get(0);
    var files = fileUpload.files;

    var data = new FormData();
    for (var i = 0; i < files.length; i++) {
        data.append(files[i].name, files[i]);
    }

    var options = {};
    options.url = "FileUploadHandler.ashx";
    options.type = "POST";
    options.data = data;
    options.contentType = false;
    options.processData = false;
    options.success = function (result) { alert(result); };
    options.error = function (err) { alert(err.statusText); };

    $.ajax(options);

    evt.preventDefault();
});

得到&#34; Undifine&#34;错误
请帮我打电话&#34; .ashx&#34;文件在MVC ..

1 个答案:

答案 0 :(得分:0)

看看下面这篇文章:

How to call a HttpHandler via JQuery in MVC

我的建议也是尽可能将整个路径放入AJAX调用的URL部分(例如&#34;〜/ shared / fileuploadhander.ashx&#34;)。

当Ant P提出上述问题时,MVC正试图将调用路由为一个动作,但后端是愚蠢的,并且不知道如何处理.ASHX文件类型(如果我的理解是正确的)。 / p>

另外,尝试将event.PreventDefault();在代码的顶部。您实质上是说不要停止点击事件的原始功能,然后再次调用它,然后您最终会阻止默认功能(如果我错了,请更正我)。尝试更像这样构建它,它会阻止事件被触发两次:

$("#btnUpload").click(function (evt) {
  evt.preventDefault();

  var fileUpload = $("#file1").get(0);
  var files = fileUpload.files;

  var data = new FormData();
  for (var i = 0; i < files.length; i++) {
    data.append(files[i].name, files[i]);
  }

  $.ajax({
    url: "FileUploadHandler.ashx",
    type: "POST",
    data: data,
    success: function(data){
       alert(data);
    },
    error: function(err){
       alert(err.statusText);
    }
  });
});