【发布时间】:2017-01-18 16:02:11
【问题描述】:
我正在上传文件,我的代码对于上传是正确的。
这个例子几乎就是我正在做的:https://stackoverflow.com/a/15680783/5874935
但是,我的项目出了点问题,突然停止工作。我一直在努力解决这个问题,但无济于事。我最近用这个函数转换成单页应用提交表单:
var ajaxFormSubmit = function (contentDiv, formDiv, modalId, formId, controllerPath) {
$(".loader").show();
$("#".concat(formId)).on("submit", function (e) {
console.log("ajax form submitted");
e.preventDefault(); // prevent standard form submission
var form = $(this);
$.ajax({
url: form.attr("action"),
method: form.attr("method"), // post
data: form.serialize(),
error: function () {
$(".loader").hide();
alert("An error occurred.");
},
success: function (partialResult) {
console.log(partialResult.length);
if (partialResult.length === 0) {
console.log("form archhived");
$("#".concat(modalId)).modal('hide');
//forcing the backdrop to go away, something is wrong with the modal, it needs work.
$('.modal-backdrop').remove();
getManager(controllerPath, contentDiv);
//get gunnery manager
}
else {
console.log("form came back");
$("#".concat(formDiv)).html(partialResult);
$(".loader").hide();
}
}
});
});
}
型号:
public class person
{
public int id {get;set;}
public string fName {get;set;}
public string lName {get;set;}
public HttpPostedFileBase attachment {get;set;}
}
这是我的控制器部分:
if (model.attachment != null)
{
var file = model.attachment;
if (file.ContentLength > 0)
{
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"),Path.GetFileName(file.FileName));
file.SaveAs(path);
System.Diagnostics.Debug.WriteLine(path);
model.attachmentLink = path;
}
}
我发现我的文件上传在这个时候停止工作并不是巧合,但我现在才注意到。如何使我的文件上传工作?
注意 该视图使用 html 助手非常标准。
【问题讨论】:
-
以前是否使用过 $,ajax?或者当您添加 $.ajax 时它停止工作。据我所知,除非您使用 FormData,否则您无法使用 AJAX 上传文件。
-
当我添加 AJAX 时停止了,我想。我最初使用的是 HTTP 帖子
-
这意味着您需要添加表单数据才能使其工作
-
我的 html 助手中的 html.beginForm 中有 encType = "multipart/form-data"}
-
您需要使用
FormData(与encType = "multipart/form-data"不同)并设置正确的ajax 选项才能使用ajax 上传文件。示例参考this answer
标签: jquery asp.net ajax asp.net-mvc form-data