方法永远不会被调用

时间:2012-03-14 15:58:58

标签: ajax asp.net-mvc

以下是我如何调用该方法:

 $.ajax({ url: "MyController/Mymethod", type: "POST", data: { file: file.files[0] } })

以下是方法:

[HttpPost]
    public ActionResult Mymethod(HttpPostedFileBase file)
    {
        if (file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            var path = Path.Combine(Server.MapPath("~/App_Data/images/location"), "petko.jpg");
            file.SaveAs(path);
        }
        return RedirectToAction("Index");
    }

file:file.files [0]的类型为File。该方法永远不会被调用。为什么呢?

2 个答案:

答案 0 :(得分:2)

虽然我知道问题是为什么你的方法永远不会被调用,但你如何填充file.files?如果这是页面上类型文件的输入,则在提交表单之前不会进行上载,因此使用您的方法时,它永远不会将文件发布到您的控制器。

由于安全原因,Javascript无权访问文件系统。如果您尝试上传ajaxy文件,可能需要查看基于Flash的上传者,例如UploadifySWFUpload

答案 1 :(得分:0)

我首先要在你的AJAX调用上提供一个错误函数,这样你就可以了解客户端发生了什么。例如:

$.ajax({ 
  url: "MyController/Mymethod", 
  type: "POST", 
  data: { file: file.files[0] },
  error: function(jqXHR, textStatus, errorThrown) {
    alert( textStatus + ": " + errorThrown );
  }
  success: function(data, textStatus, jqXHR) {
    alert( "success: " + textStatus );
  }
});

我假设您已经在控制器中设置了断点,以验证它实际上没有被调用。