1

单击我的 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 函数是一个 javascript 函数,它在我的 android 设备上运行并将图像上传到我的~/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调用它的正确方法吗?

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

4

1 回答 1

1

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

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

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

public class FunctionsController : Controller
{
}

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

  1. 创建一个FunctionsController : Controller类并将TestMove方法添加到它。
  2. "Functions"将 url 字符串中的参数更改为您的TestMove方法当前所在的控制器的名称。

由于您通过 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 });
}
于 2013-04-24T04:14:53.293 回答