我试图使用这里提到的示例
How to do a ASP.NET MVC Ajax form post with multipart/form-data?
但我不断收到“失败”的错误信息框
Index.cshtml
Files Upload
$(function() {
$("#form0").submit(function(event) {
var dataString;
event.preventDefault();
var action = $("#form0").attr("action");
if ($("#form0").attr("enctype") == "multipart/form-data") {
//this only works in some browsers.
//purpose? to submit files over ajax. because screw iframes.
//also,we need to call .get(0) on the jQuery element to turn it into a regular DOM element so that FormData can use it.
dataString = new FormData($("#form0").get(0));
contentType = false;
processData = false;
} else {
// regular form,do your own thing if you need it
}
$.ajax({
type: "POST",url: action,data: dataString,dataType: "json",//change to your own,else read my note above on enabling the JsonValueProviderFactory in MVC
contentType: contentType,processData: processData,success: function(data) {
//BTW,data is one of the worst names you can make for a variable
},error: function(jqXHR,textStatus,errorThrown) {
//do your own thing
alert("fail");
}
});
}); //end .submit()
});
@Html.Action("Files","Home")
@using (Ajax.BeginForm("Files","Home",new AjaxOptions { UpdateTargetId = "uploadDiv",HttpMethod = "Post" },new { enctype = "multipart/form-data",@id="form0"}))
{
}
控制器
public PartialViewResult Files(HttpPostedFileBase file)
{
IEnumerable files;
if ((file != null) && (file.ContentLength > 0))
{
string fileName = file.FileName;
string saveLocation = @"D:\Files";
string fullFilePath = Path.Combine(saveLocation,fileName);
try
{
file.SaveAs(fullFilePath);
FileInfo fileInfo = new FileInfo(fullFilePath);
file.InputStream.Read(new byte[fileInfo.Length],file.ContentLength);
}
catch (Exception e)
{
TempData["FileUpload"] = e.Message;
return PartialView();
}
files = Directory.GetFiles(@"D:\Files\");
return PartialView(files);
}
else
{
files = Directory.GetFiles(@"D:\Files\");
return PartialView(files);
}
}
Files.cshtml
@model IEnumerable
@foreach (string f in Model)
{
@f
}
Global.asax
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());