我有一个在对话框中显示的表单,它有一个“提交”按钮,单击该按钮时使用 jQuery 使用 AJAX 将表单发布到服务器。这是一个MVC动作方法。上传的文件始终为空。在使用 Google 时,我读到您通常无法使用 AJAX 发布文件,除非您使用某种插件。
我不想使用插件,我读到这可以通过支持 HTML5 File API 的浏览器来完成,所以我想让它与它一起工作。
我现在不关心拖放或其他任何事情,我只想使用 jQuery 将文件与表单的其余部分一起发布。
到目前为止,我有:
这是表单的部分视图:
@model ImageReceiptLineModel
@using (Html.BeginForm(MVC.EditImageReceiptLine(), FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.HiddenFor(model => model.ReceiptLineSetID)
@Html.HiddenFor(model => model.LineNumber)
<input id="uploadFile" name="uploadFile" type="file" value="Choose New Image" />
@Html.LabelFor(model => model.ImageDescription)
@Html.TextBoxFor(model => model.ImageDescription)
}
这是用于发送表单的 jQuery
if ($Form.valid()) {
// get the url and the form data to send the request
var Url = $Form.attr('action');
var FormData = $Form.serialize();
// now do the ajax call
$.ajax({
url: Url,
data: FormData,
type: 'POST',
cache: 'false',
success: function (data, textStatus, jqXHR) {
// do something here
},
error: function (jqXHR, textStatus, errorThrown) {
// do something here
}
});
}
这是 MVC 操作方法:
/// <summary>
/// Edit receipt line action
/// </summary>
/// <returns>Action result</returns>
[HttpPost]
public virtual ActionResult EditImageReceiptLine(HttpPostedFileBase uploadFile, ImageReceiptLineModel model)
{
}
我需要添加什么才能将文件添加到表单中?“FormData”是我发布到服务器的序列化表单数据。