如何使用jquery将文件传递给控制器

时间:2012-04-20 21:31:23

标签: jquery asp.net-mvc-3

我正在尝试使用jquery将文件传递给我的控制器,以便用户在上传后不必离开页面....

我似乎无法让这个工作。一旦传递给我的控制器,我就会得到一个“空引用”。这是我尝试过的:

控制器:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
var image = Path.GetFileName(file.FileName);

if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var filePath = Path.Combine(Server.MapPath("~/Content/Images/UploadedImages/"), System.IO.Path.GetFileName(file.FileName));
file.SaveAs(filePath);

return Json(filePath.ToString());
}

else
{
return Json("Image failed to load");
}

}

查看:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "testupload", name = "testupload" }))
{

<div class="editor-field">
<input type="file" name="file" id="file" />
</div>

<input type="submit" value="Submit"/>
}

<input type="button" onclick="upload();" value="Upload" />

<input type="text" id="url"/>

Jquery的:

function upload() {

$.post("../../../Home/Upload", $("#testupload"), function (data) {
$("#url").val(data);
});
}

1 个答案:

答案 0 :(得分:1)

使用ajax无法完成。

您需要创建一个隐藏的iframe,其form <input type="file" />字段提交给正确的url,您可以在表单中监控结果回报。

这样,它看起来就是无缝的。