【问题标题】:Method never gets called方法永远不会被调用
【发布时间】:2012-03-15 03:06:04
【问题描述】:

我是这样称呼这个方法的:

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

【问题讨论】:

  • 使用 firebug 并查看它调用的 url。在你的代码中放置一个断点来查看该方法是否正在执行
  • file.files[0] 是什么file 是什么?他来自哪里?如果您真的需要帮助,请显示完整代码,这不是分享游戏...
  • @gdoron 文件是浏览按钮。 file.files[0] 是通过浏览按钮选择的。
  • 尝试删除ajax请求的数据部分,我觉得不对,看看对你有没有帮助。
  • @gdoron 没用。

标签: ajax asp.net-mvc


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我将首先在您的 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 );
      }
    });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多