Javascript执行Action以在MVC4中移动文件

时间:2013-04-24 03:42:48

标签: javascript ajax asp.net-mvc

单击MVC视图中的按钮后,将执行以下javascript函数

<script type="text/javascript">
    function showAndroidUpload(string) {
        Android.AndroidUpload(string);

        var url = '@Url.Action("TestMove","Functions")';
        $.ajax({ url: url, success: DataRetrieved, type: 'POST', dataType: 'json' });
    }
</script>

AndroidUpload函数是一个在我的Android设备上运行的javascript函数,并将图像上传到我的~/App_Data/文件夹中,我希望将此图像移动到我的~/Content/images/文件夹中。我的控制器中的操作如下:

public ActionResult TestMove()//UploadModel model)//, IEnumerable<HttpPostedFileBase> picture)
{     
    string UploadedPath = "~/App_Data/image.jpg";
    string SavePath = "~/Content/images/movedimage.jpg";

    System.IO.File.Move(UploadedPath, SavePath);
    return RedirectToAction("Index");
}

图片上传有效,但操作永远不会执行。这是使用ajax调用它的正确方法吗?

我知道我的文件名等是正确的,所以我不确定问题出在哪里。

1 个答案:

答案 0 :(得分:1)

编辑:我之前的回答,虽然技术上正确并不是最好的。感谢BASmith指出我正确的方向。

EDIT2:从ajax调用中添加了重定向逻辑。

您的操作未被调用,因为TestMove方法不是此类的成员:

public class FunctionsController : Controller
{
}

所以这可以通过以下两种方式之一解决:

  1. 创建一个FunctionsController : Controller类并向其添加TestMove方法。
  2. 将网址字符串中的"Functions"参数更改为TestMove方法当前所在的控制器名称。
  3. 由于你是通过ajax调用你的方法,你需要自己处理重定向,如下所示: MVC RedirectToAction through ajax jQuery call in knockoutjs is not working

    JavaScript的:

    <script type="text/javascript">
        function showAndroidUpload(string) {
            Android.AndroidUpload(string);
    
            var url = '@Url.Action("TestMove","Functions")';
            $.ajax({ url: url, success: function(response){ window.location.href = response.Url; }, type: 'POST', dataType: 'json' });
        }
    </script>
    

    控制器:

    public ActionResult TestMove()//UploadModel model)//, IEnumerable<HttpPostedFileBase> picture)
    {     
        string UploadedPath = "~/App_Data/image.jpg";
        string SavePath = "~/Content/images/movedimage.jpg";
    
        System.IO.File.Move(UploadedPath, SavePath);
        var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Home");
        return Json(new { Url = redirectUrl });
    }