我正在使用带有 MVC4 应用程序的 jQuery 文件上传插件 ( https://github.com/blueimp/jQuery-File-Upload )。
文件上传功能(上传和上传文件表)包含在部分视图中。
所以我有许多包含文件上传部分视图的视图。上传文件时,会触发 Attachment 控制器的 Save 操作。这将处理文件的存储,然后检索站点特定区域的更新文件列表。然后视图返回到文件上传 jQuery,然后将 Html 注入到父页面 (#_attachments) 中的 div 中。
所有这一切都很好,因为一切都正确呈现。我遇到的问题是,在执行文件上传并通过 jQuery 重新加载部分视图后,文件上传不再有效。
看来这可能是由于事件不再附加到#fileUpload 控件。我尝试过使用“on”方法,但这似乎也不起作用。
局部视图脚本
$(function () {
$('#fileUpload').fileupload({
url: "/Attachment/Save",
done: function (e, data) {
// "data.result" will contain the response data
$("#fileUploadProgress").hide();
$("#_attachments").html(data.result);
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$("#fileUploadProgress").show();
$("#fileUploadProgress .bar").css("width", progress + "%");
}
});
});
控制器/动作
[HttpPost]
public ActionResult Save()
{
// Get a reference to the file that our jQuery sent. Even with multiple files, they will all be their own request and be the 0 index
HttpPostedFileBase file = HttpContext.Request.Files[0];
int ncpId = Convert.ToInt32(Request.Form["ncpId"]);
int stage = Convert.ToInt32(Request.Form["stage"]);
ncpRepository.SaveAttachmentToDb(file, CurrentUser.UserId, ncpId, stage);
//return the partial view to refresh the list of files
var attachments = ncpRepository.GetAttachmentsForRecord(ncpId);
var attachmentsViewModel = AutoMapper.Mapper.Map<IQueryable<Attachment>, List<AttachmentViewModel>>(attachments);
ViewData["Stage"] = stage;
return PartialView("_StageAttachments", attachmentsViewModel);
}