2012-03-14 205 views
0

这里是我如何调用该方法:方法不会被调用

$.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.files [0]类型的文件。该方法永远不会被调用。为什么?

+0

使用萤火虫,看看它调用的是什么网址。在你的代码中加入一个断点来查看该方法是否正在执行 – Shyju 2012-03-14 16:02:29

+0

@Shyju它不。 – 2012-03-14 16:04:02

+0

什么是'file.files [0]'什么是'文件'以及他从哪里来的?如果你真的需要帮助,请显示完整的代码,这不是一个sharades游戏... – gdoron 2012-03-14 16:07:23

回答

2

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

由于安全原因,Javascript无法访问文件系统。如果你试图做一个ajaxy文件上传,你可能想看看基于Flash上​​传如UploadifySWFUpload

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); 
    } 
}); 

我假设你已经在你的控制器中设置了一个断点来验证它实际上没有被调用。