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

Posted

技术标签:

【中文标题】在 MVC 中如何通过 jquery 调用 .ashx 处理程序文件【英文标题】:In MVC how to call .ashx handler file through jquery 【发布时间】:2014-07-27 09:33:04 【问题描述】:

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

我尝试了自爆代码

 $("#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();
);

出现“Undifine”错误 请帮我在 MVC 中调用“.ashx”文件..

【问题讨论】:

How to call a HttpHandler via JQuery in MVC的可能重复 【参考方案1】:

看看下面这篇文章:

How to call a HttpHandler via JQuery in MVC

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

正如 Ant P 在上述问题中所说,MVC 试图将调用路由为一个操作,但后端很笨,不知道如何处理 .ASHX 文件类型(如果我的理解是正确的)。

另外,试着把 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);
    
  );
);

【讨论】:

以上是关于在 MVC 中如何通过 jquery 调用 .ashx 处理程序文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jquery AJAX 调用 MVC Action 然后在 MVC 中提交表单?

jQuery 通过 Ajax 在 ASP.NET MVC C# 中调用 Action 方法

如何在asp.net mvc中使用jquery ajax在方法中调用字符串

如何以 10 秒的间隔在 mvc razor 页面中使用 jQuery 调用方法并将输出附加到 html

如何使用 jQuery 调用 MVC ChildActionOnly 控制器动作

通过 Jquery 保存到 MVC 模型输入后如何在 Html 中显示记录